bugfix> angular > 投稿

配列内にあるすべての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 件
  • プレーンJavaScript配列はによって考慮されます concat (そして基本的に、オブザーバブルをパラメーターとして受け入れる他の演算子)いわゆる ObservableInput ここでは、アイテムを繰り返し、すべてを個別の排出量として再放出します。

    だからあなたが望むなら concat 配列内のアイテムをサブスクライブするには、配列をパラメーター化する必要があります。

    concat(...requestArray)
    
    

  • すべての呼び出しが完了した後に結果を配列にしたい場合は、次のように行うことができます。

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

あなたの答え