[英]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.