RxJS 排队相关任务

标签 rxjs

如果我有这样的数组

{
    parent: [
        {
            name: 'stu',
            children: [
                {name: 'bob'},
                {name: 'sarah'}    
            ]
        },
        { 
          ...
        }
    ]
}

我想循环遍历每个父对象并依次循环遍历他们的子对象,这样在处理完所有子对象(一些较长的异步过程)之前我不会启动下一个父对象,我如何使用 RxJS 执行此操作?

我试过这个:

var doChildren = function (parent) {
    console.log('process parent', parent.name);
    rx.Observable.fromArray(parent.children)
    .subscribe(function (child) {
        console.log('process child', child.name);
        // do some Asynchronous stuff in here
    });
};

rx.Observable.fromArray(parents)
.subscribe(doChildren);

但我让所有的 parent 注销,然后是所有的 child 。

最佳答案

concatMap 在这里效果更好。因为如果迭代 children 是异步的,那么 child 的顺序就会被打乱。 concatMap 可以保证一次完成一个父类。

Rx.Observable.from(parents)
  .concatMap(function (p) {
    return Rx.Observable.from(p.children)
  })
  .subscribe();

关于RxJS 排队相关任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27234286/

相关文章:

javascript - RxJS,Observable,如何保存值并将映射切换到另一个

typescript - 可观察和 xhr.upload.onprogress 事件

javascript - Angular 6 : Property 'map' does not exist on type 'Observable<Response>'

angular - 使用拦截器在 Angular 4.3 中使用新 header 重试 Http 请求

stream - 流如何适合 Flux 应用程序?

typescript - 类型 'take' 上不存在属性 'FirebaseObjectObservable<any>'

angular - 在 foreach 循环中订阅多个 observable<boolean>?

javascript - 使用 Angular 2 中的 Observables 获取一次数据

javascript - 如何使用 systemjs 在最小的 Angular 2 应用程序中加载 RxJS?

angular - 观察者函数中的异步等待