如果我有这样的数组
{
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/