簡體   English   中英

Angular 9 rxjs - forkJoin 返回 Observables 數組而不是值數組

[英]Angular 9 rxjs - forkJoin returns array of Observables instead of array of values

這是我的問題的簡化版本:

this.store.pipe(
  select(arr),
  switchMap(arr => {
    const data = arr.map(arrItem => this.dataService.getData(arrItem.id));
    return forkJoin(...data);
  }
  map(data => {
    console.log(data);
    return data;
  )
);

不知何故,只有當 arr.length = 1 時,我才會在 console.log 中獲得值數組。如果 arr.length > 1,我將獲得 Observables 數組。

這怎么可能? 我誤解了forkJoin嗎? 我該如何解決?

如果您的服務響應是observable的,並且您想在最后檢索響應數組,您可以這樣做:

this.store.pipe(
  select(arr),
  switchMap(arr => from(arr)),
  mergeMap(arrItem => this.dataService.getData(arrItem.id), 2),  // max 2 concurrents requests here
  toArray()
).subscribe(datas => {
  // datas is an array of returned data from getData service
});

注意mergeMap (= 2 ) 的第二個參數,用於指定最大並發請求。

switchMap(arr => from(arr)) :從一個數組值,到一個新的 observable 發出的值 = 數組的每個值

toArray() :獲取所有發出的值,並轉換為一個數組

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM