我想知道如何在 If-Else 分支中等待所有 REST 呼叫完成,即使 Else 端沒有 REST 呼叫。
下面是一個例子:
createNewList(oldList: any[]) {
const newList = [];
oldList.forEach(element => {
if (element.isAwesome) {
this.RESTCall().subscribe(result => {
element.property = result;
newList.push(element);
});
} else {
newList.push(element);
}
});
// wait here for all elements of RESTCall, then:
return newList;
}
希望你能關注我。當然,在當前版本中,restcalls 需要更長的時間,并且函式過早地傳輸串列。
我的第一種方法是將不同的、更高級別的 observable 添加到串列中,通過 mergeAll ( https://www.learnrxjs.io/learn-rxjs/operators/combination/mergeall )合并它們,然后執行這個 complete() 函式. 但這對我來說似乎非常曲折。
您是否有任何提示或流程可以讓我以更簡單的方式解決此類問題?
uj5u.com熱心網友回復:
你可以把你的串列變成一個可觀察的串列,這會更容易推理。
const tasks = oldList.map(element =>
element.isAwesome ? performRestCall(element) : of(element));
performRestCall(element: any): Observable<any> {
return this.RESTCall().pipe(
map(result => {
element.property = result;
return element;
})
);
}
然后您可以使用forkJoin來獲取所有結果:
forkJoin(tasks).subscribe(newList => {
console.log(newList);
})
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/352693.html
上一篇:使用Angularobservable定期查詢webapi并訂閱
下一篇:乘以模型和輸入值
