等待订阅循环结束,然后继续

时间:2019-02-11 20:25:55

标签: angular typescript rxjs observable

在将所有结果推送到nodesToExpand时,如何检查以下for循环是否完成?

getFilterResult是nodeService服务中的一个http请求调用。

  for(var step in paths)
  {
    this.nodeService.getFilterResult(paths[step]).subscribe(
      (node) =>
      {
        nodesToExpand.push(node);
      }
    );
  }

1 个答案:

答案 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, ...]