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); 

但我得到的所有的家长注销,然后所有的孩子。

concatMap在这里效果更好。因为如果迭代的孩子是异步的,孩子的顺序就会混乱。 concatMap可以确保一次完成一位家长。

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

看起来这是前一段时间要求,但这里是对付这种情况的一种方法:

Rx.Observable.fromArray(parents) 
.flatMap(function(parent) { 
    return parent.children; 
}) 
.flatMap(function(child) { 
    return doSomeAsyncThing(child); //returns a promise or observable 
}) 
.subscribe(function(result) { 
    // results of your async child things here. 
}); 

的想法是利用flatMap将采取任何阵列,承诺或观测回来,“扁平化“他们变成了可以观察的个人事物。

我想你可能也会受益于平面映射你正在用子节点进行异步事件的结果,所以我在那里添加了它。然后你可以订阅结果。

我仍然觉得这个问题缺乏一些上下文,但希望这是你要找的。