Ожидание подписки для завершения цикла, прежде чем продолжить - PullRequest
0 голосов
/ 11 февраля 2019

Как проверить, завершен ли следующий цикл for при отправке всех результатов в nodeToExpand?

getFilterResult - это вызов HTTP-запроса в сервисе nodeService.

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

1 Ответ

0 голосов
/ 11 февраля 2019

То, что вы сейчас делаете, выглядит для меня очень неправильно.Старайтесь не смешивать RxJS с циклами for.Обычно в RxJS есть что-то, что удовлетворяет вашим потребностям, взгляните на https://rxmarbles.com/.

Если вы хотите подождать несколько потоков, пока они не отправят событие, вы должны использовать функциюlateLatest ().Он не только сообщает вам, когда все HTTP-запросы ответили, но также передает вам данные в структуре кортежа.

const httpCalls:Array<Observable<any>> = paths.map(step => this.nodeService.getFilterResult(step));
combineLatest(HttpCalls)
.subscribe(results => console.log(results));
// --> [Call1Result, Call2Result, ...]
...