RXJS 配列のすべての観測値が完了するのを待つ(またはエラー)
2023-08-01 11:34:32
質問
こんな感じで、observableを配列にプッシュしているのですが...。
var tasks$ = [];
tasks$.push(Observable.timer(1000));
tasks$.push(Observable.timer(3000));
tasks$.push(Observable.timer(10000));
すべてのtasks$が完了したときにemitするObservableが欲しい。 実際には、tasks$は既知の数のObservableを持っていないことを覚えておいてください。
試しに
Observable.zip(tasks$).subscribe()
を試してみましたが、これはタスクが1つしかない場合に失敗するようで、私が期待する方法で動作するために、ZIPは偶数の要素を必要とすると私に思わせています。
私が試したのは
Observable.concat(tasks$).subscribe()
を試してみましたが、concatオペレータの結果は、observableの配列にしかなりません。 例えば、基本的に入力と同じです。それに対してsubscribeを呼び出すこともできません。
C#では、これは次のようなものです。
Task.WhenAll()
. ES6 promiseでは、これは
Promise.all()
.
私は多くのSOの質問に出会いましたが、それらはすべて、既知の数のストリームを待つこと(たとえば、それらを一緒にマッピングすること)に対処しているように見えます。
どのように解決するのですか?
すべてのソース observable が完了したときにemitするような observable を構成したい場合は
forkJoin
:
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/observable/forkJoin';
import 'rxjs/add/operator/first';
var tasks$ = [];
tasks$.push(Observable.timer(1000).first());
tasks$.push(Observable.timer(3000).first());
tasks$.push(Observable.timer(10000).first());
Observable.forkJoin(...tasks$).subscribe(results => { console.log(results); });
関連
-
[解決済み】React.jsの配列の子要素のユニークキーを理解する
-
[解決済み] JavaScriptの配列で一意な値をすべて取得する(重複を排除する)。
-
[解決済み] 配列の反復処理に "for...in "を使用するのは、なぜ良くないのでしょうか?
-
[解決済み] jQuery の Ajax リクエストがすべて終了するまで待ちますか?
-
[解決済み】一部の約束が拒否されても、すべての約束が完了するまで待つ
-
[解決済み] Javascript 空の配列の削減
-
[解決済み] moment.jsでミュータビリティを回避するには?
-
[解決済み] JavaScriptで長い配列を小さい配列に分割する方法
-
[解決済み] Chrome拡張機能:popup.htmlを強制終了させる
-
[解決済み] RxJSで2つのobservableを'待つ'方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] <Enter>でjQuery UIダイアログを送信する
-
[解決済み] ExtJS 4のイベントハンドリングについて
-
[解決済み] モバイルWeb HTML5フレームワークの選び方【終了しました
-
[解決済み] Chart.jsを使ってドーナツチャートの中にテキストを追加するには?
-
[解決済み] React js 親コンポーネントから子コンポーネントの状態を変更する
-
[解決済み] コールバック地獄とは何か、RXはそれをどのように、そしてなぜ解決するのか?
-
[解決済み] Chromeの拡張機能開発にWebStormを使用するにはどうすればよいですか?
-
[解決済み] jqueryはjavascriptのライブラリなのかフレームワークなのか?[クローズド]
-
[解決済み] AJAX Mailchimp サインアップフォームの統合
-
[解決済み] jQueryを使用して、すべてのクリックイベントハンドラを削除するにはどうすればよいですか?