Angular подписаться внутри foreach, не возвращая обещание - PullRequest
0 голосов
/ 22 марта 2020

Я делаю построчное обновление внутри оператора foreach. Мне нужно подождать, пока все элементы в foreach l oop будут обновлены, а затем мне нужно завершить работу. Этот метод ниже работает до службы, но «wait.then» никогда не срабатывает. Есть ли лучший способ сделать это?

var wait = new Promise((resolve, reject) => {
  this.myArray.Items.forEach(t => {
    this.service.UpdateItems(t).subscribe(
      () => {},
      err => this.alert(err),
      () => this.app.tick(),
    );
  });
});
wait.then(() => {
  // Wait until the foreach finished
  console.log(complete);
});

1 Ответ

1 голос
/ 22 марта 2020

Вам не нужно использовать обещания. Вы можете сделать что-то подобное, используя forkJoin:

const sources = this.myArray.Items.map(item => {
  return this.service.UpdateItems(item).pipe(
    tap({
      complete: () => this.app.tick(), // not sure for what you're using this
      error: err => this.alert(err),
    }),
  );
});

forkJoin(sources)
  .pipe(finalize(() => console.log('do something')))
  .subscribe();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...