2

このような配列の配列がある場合

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

しかし、私はすべての親をログアウトさせてから、すべての子供をログアウトさせます。

4

2 に答える 2

5

concatMapここでうまく機能します。子の繰り返しが非同期の場合、子の順序がめちゃくちゃになるためです。concatMap一度に 1 つの親を確実に終了できます。

Rx.Observable.from(parents)
  .concatMap(function (p) {
    return Rx.Observable.from(p.children)
  })
  .subscribe();
于 2015-10-23T03:42:54.827 に答える