配列内にあるすべてのHTTPリクエストをサブスクライブするためにconcatを使用したいと思います。配列には、1つまたは複数のhttpリクエストを含めることができます。私は現在、次のような監視可能な配列を作成しています。
requestArray.push(this.updateUser());
requestArray.push(this.updateCustomer());
そして、リクエストを一度に1つずつ送信したいので、次のようにconcatを使用してみました。
concat(requestArray).subscribe(results => {
console.log(results);
})
結果は完了したリクエストの配列になると思いますが、代わりに次のように出力します。
Observable{_isScaler: false, source: Observable}
Observable{_isScaler: false, _subscribe: f}
実際に私のオブザーバブルを購読していないようです。
回答 2 件
すべての呼び出しが完了した後に結果を配列にしたい場合は、次のように行うことができます。
concat(...requestArray).pipe( toArray() ).subscribe(console.log);
これは基本的に同じことです:
merge(...requestArray, 1).pipe( toArray() ).subscribe(console.log);
2番目のものとの違いは、必要な同時リクエストの数を明示的に決定できることです。したがって、サーバーを圧倒することなく、一度にいくつかを並行して実行したい場合は、次のようにすることができます。
最大3つの同時リクエスト:
merge(...requestArray, 3).pipe( toArray() ).subscribe(console.log);
関連した質問
- 更新されたフィールドが1つだけのオブジェクトをストリームに出力できますか?
- Angular <2x observableの変更に対応する方法
- 監視可能な配列がngrxで空です
- 変更が発生しても配列が更新されないAngular10
- メソッドパラメータがfalseの場合にサービスluanchをnullまたは0にする方法
- 外部APIを呼び出すこのAngularサービスメソッドからPromiseをどの程度正しく返すのですか?
- プロパティへの角度のある観察可能なサブスクライブ
- Angular8でいくつかのajaxリクエストのステータスを検出するための最良の専門的な方法は何ですか?
- httpから返されたデータを同じ構造のtypescriptオブジェクトに割り当てることができません
- WebSocketSubjectからのBlobオブジェクトの逆シリアル化
プレーンJavaScript配列はによって考慮されます
concat
(そして基本的に、オブザーバブルをパラメーターとして受け入れる他の演算子)いわゆるObservableInput
ここでは、アイテムを繰り返し、すべてを個別の排出量として再放出します。だからあなたが望むなら
concat
配列内のアイテムをサブスクライブするには、配列をパラメーター化する必要があります。