私は約束の世界から観察可能な世界へと移動しています。私が通常Promiseで行うことの1つは、一連のタスクをチェーンして、それらを順番に実行させることです。たとえば、3つのタスクprintLog1()
があります。1をコンソールに出力し、printLog23()
2と3をコンソールに出力し、printLog4()
4を出力します。
1-2-3-4を印刷したいときは、次のようなプロミスチェーンを作成します
printLog1()
.then(() => {
printLog23();
})
.then(() => {
printLog4();
});
今、私が観察可能と同じ機能をしたいと私は書き換えることができるprintLog()
観察可能なように関数を
printLog1 = Rx.Observabale.of(1).map((i) => console.log(i));
printLog23 = Rx.Observabale.of(2, 3).map((i) => console.log(i));
printLog4 = Rx.Observabale.of(4).map((i) => console.log(i));
次に、コンソールに異なる値を出力する3つのオブザーバブルがあります。これらの3つのオブザーバブルが順番に実行されて出力されるように、それらをチェーンするにはどうすればよい1-2-3-4
ですか?
放出の順序が、使用できるソースObservable concat
またはconcatMap
演算子を指定した順序と同じであることを確認したい場合。
concat*
演算子は(それは同様の約束と連携し、見るだけで、以前の観測が完了した後、観察可能に加入http://reactivex.io/rxjs/class/es6/MiscJSDoc.js~ObservableInputDoc.htmlを)。
あなたの場合、それは次のようになります:
import { concat } from 'rxjs'; // Note, concat from 'rxjs', is not the same as concat from 'rxjs/operators'
concat(printLog1, printLog23, printLog4);
...または、concatMap
1つのPromiseのリクエストが前のPromiseからの応答に依存する場合:
printLog1.pipe(
concatMap(response => ...),
concatMap(response => ...),
);
...または順序が問題ではない場合は、merge
すべてのObservables / Promiseをすぐにサブスクライブし、それらが到着すると結果を再発行することができます。
merge(printLog1, printLog23, printLog4);
2019年1月:RxJS 6用に更新
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加