typescript - 连接 rxjs Observables

标签 typescript angular rxjs observable rxjs5

是否可以连接多个可观察对象?

例如: 我有 3 个功能:

ensureUserLogged():Observable<boolean>

createEntity():Observable<Entity>

checkEntity():Observable<boolean>

我想做这样的事情:

Observable.combine (ensureUserLogged(), createEntity(), checkEntity()).subscribe (
    checkEntityResult => console.log (checkEntityResult),
    error => console.log (error)
);

或类似的东西:

ensureUserLogged().then (logged => createEntity()).then (newEntity => checkEntity ())...

否则我需要写一个丑陋的金字塔:

ensureUserLogged().subscribe (
    res => {
        createEntity ().subscribe (
            res => {
                checkEntity ().subscribe (
                    res => { console.log ("I'm finally here") },
                    error {}
                )
            },
            err => {
            }
        );
    },
    err => {
    }
)

有什么东西可以实现我的意志吗?

谢谢

最佳答案

您需要使用 Observable.forkJoin 进行并行执行:

Observable.forkJoin(ensureUserLogged(), createEntity(), checkEntity()).subscribe (
  checkEntityResult => console.log (checkEntityResult),
  error => console.log (error)
);

checkEntityResult 将对应一个包含每个元素的数组:第一个为 ensureUserLogged 的结果,...

连续执行,您需要使用flatMap 运算符:

ensureUserLogged().flatMap((resultOfEnsureUserLogged) => {
  return createEntity();
}).flatMap((resultOfCreateEntity) => {
  return checkEntity();
}).subscribe((resultOfChekEntity) => {
  (...)
});

您会注意到您可以混合使用。例如这样的事情:

ensureUserLogged().flatMap((resultOfEnsureUserLogged) => {
  return Observable.forJoin(createEntity(), checkEntity());
}).subscribe((resultOfCreateEntityAndChekEntity) => {
  (...)
});

关于typescript - 连接 rxjs Observables,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36221115/

相关文章:

angular - combineLatest 与 FormControl valueChanges 事件绑定(bind)不发出

Angular 4 Ngx-datatable Filter not working object is null but accessed (even with if condition)

javascript - 在 typescript svelte 中导入别名 svelte 组件

json - 使用 JSON 和 TypeScript 进行静态类型化

typescript - 使用 typescript 和 babel-polyfill 会导致编译器错误

angularjs - Ionic3 中的自定义字体

angular - 在 Angular Material 表的每一行添加图标作为按钮

typescript - 从类型中动态排除某个键

javascript - 共享服务无法将数据传递给下一个组件

javascript - 显示活跃用户图标 - 如何确定谁不再在线(寻找 NG 或 JS 解决方案)