在将所有结果推送到nodesToExpand时,如何检查以下for循环是否完成?
getFilterResult是nodeService服务中的一个http请求调用。
for(var step in paths)
{
this.nodeService.getFilterResult(paths[step]).subscribe(
(node) =>
{
nodesToExpand.push(node);
}
);
}
答案 0 :(得分:2)
您当前正在做什么对我来说是非常错误的。尽量不要将RxJS与for循环混合使用。通常,RxJS可以满足您的需求,请查看https://rxmarbles.com/。
如果您要等待多个流直到它们发出一个事件,则可以使用CombineLatest()。它不仅会告诉您所有http请求何时响应,而且还会以元组结构的形式将数据交给您。
const httpCalls:Array<Observable<any>> = paths.map(step => this.nodeService.getFilterResult(step));
combineLatest(HttpCalls)
.subscribe(results => console.log(results));
// --> [Call1Result, Call2Result, ...]