私はネストされた観測可能な地獄で立ち往生しており、手で行うことができます。ネストしたObservablesを平坦化する
Iは、次のコードブロック
return this.findUser(term).map(users => {
return users.map(user => this.getLastLogin(user.user_id).map(last_login => {
user.last_login = last_login;
return user;
}));
});
findUser
戻りObservable<User[]>
とgetLastLogin
戻りObservable<number>
を有します。
私は基本的にユーザーのリストを取得し、別の値の情報でこれを更新することを望んでいます。
今すぐ上のコードは<Observable<Observable<User>[]>
を返しています。
map
をflatMap
に置き換えることができると考えましたが、これはオブジェクトを<Observable<Observable<User>>
に変えます。
RxJSのドキュメントは少し解読しにくいので、switch
、forkJoin
またはflatMap
の組み合わせが私に必要なものを手に入れてくれるかどうかはわかりません。
私はObservable<User[]>
を返すことを望んでいます。誰かが私を正しい方向に向けることができますか?
私はあなたが滑らかな印象の答えだと思う - 質問のタイトルは、ネストされた観測を平坦に言及し、特にとして - しかし、私はか否かの好奇心配列の順序は常にソース配列の配列と一致します: 'mergeMap'を使用すると非決定論的な順序になりますか?順序は、どの観測対象が最初に放出されるかによって異なりますか? – cartant
これは真であり、 'merge'も' mergeAll'も問題の可能性のある順序と同じ順序を保証します。しかし、問題であれば、 'mergeMap'を' concatMap'で置き換えることができます。それだけです。 – martin
興味深いことに、このコードはTypeScriptのクラスを使用するときには機能しません。コンパイルすると、 'findUsers'メソッドの' mergeAll'が 'User []'を返すように見えます。ここに私が見ている行動へのリンクがあります。 https://jsbin.com/wiwayikiye/edit?js,console任意のアイデアですか? – user3750194