在同一个函数中等待订阅
Wait for subscription in the same function
我想知道如何在 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 需要更长的时间并且函数过早地传输列表。
我的第一个方法是将不同的、更高级别的可观察对象添加到列表中,通过 mergeAll (https://www.learnrxjs.io/learn-rxjs/operators/combination/mergeall) 合并它们,然后执行这个 complete() 函数。但这对我来说似乎很曲折。
你有什么提示或流程可以帮助我更轻松地解决此类问题吗?
您可以将您的列表变成可观察值列表,这样更容易推理。
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);
})
我想知道如何在 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 需要更长的时间并且函数过早地传输列表。
我的第一个方法是将不同的、更高级别的可观察对象添加到列表中,通过 mergeAll (https://www.learnrxjs.io/learn-rxjs/operators/combination/mergeall) 合并它们,然后执行这个 complete() 函数。但这对我来说似乎很曲折。
你有什么提示或流程可以帮助我更轻松地解决此类问题吗?
您可以将您的列表变成可观察值列表,这样更容易推理。
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);
})