-1

最初のものはオブジェクトの配列を返します。すべてのオブジェクトには、2 番目のサービスを呼び出すために必要な一意のユーザー ID があります。

this._vendorService.getAllPickupLoc().subscribe(val => {
  val.forEach(element => {
    this.finalObject = element;
    this._vendorService.getVendorUserInfo(element.id).subscribe(res => {
      this.finalObject["userInfo"] = res;
      this.finalArray.push(this.finalObject);
    });
  });
});

問題なく動作しますが、上記のコードには 2 つの欠点があります。1. コールバック地獄のように見え始めています。2. すべてのサブスクリプションの廃棄を自分で処理する必要があります。

4

1 に答える 1

1

RxJS 演算子を使用して、これらを連鎖させることができます。

this._vendorService.getAllPickupLoc().pipe(
  // emit each element in order
  mergeMap(elements => from(elements)),
  // subscribe to inner Observable for each element and emit result
  mergeMap(element => this._vendorService.getVendorUserInfo(element.id)),
  // handle info
  tap(userInfo => {
    this.finalObject["userInfo"] = res;
    this.finalArray.push(this.finalObject);
  })
).subscribe();

コードの残りの部分の構造に応じて、各出力を削除して追加し、最終結果を配列として出力するtapこともできます。maptoArray

于 2019-09-13T08:30:58.770 に答える