Angular несколько .подписаться на - PullRequest
0 голосов
/ 02 марта 2020

Hy, как я могу сделать doSometihg с правильным итоговым значением итога?

let total: number = 0;
for (let articleId in items) {
  this.articleService.getArticleById(articleId).subscribe((article: Articles[]) => {//Async  
    total = totale + article.price;
  })
}
doSometihg(total);

Спасибо всем

Ответы [ 2 ]

3 голосов
/ 02 марта 2020

Используйте fork join для параллельного запуска всех асинхронных вызовов c и ожидания их завершения.

Когда статьи вернутся, вы можете получить общее количество и продолжить обработку.

forkJoin(
  items.map(articleId => this.articleService.getArticleById(articleId))
).subscribe((articles: Article[]) => {
  const total: number = articles
    .reduce((cumulative, article) => cumulative + article.price, 0);
  doSomething(total);
});
0 голосов
/ 02 марта 2020
import { forkJoin } from 'rxjs/observable/forkJoin';
const allObs = forkJoin(...children.map(r => r.validate()));
allObs.subscribe(res => console.log(res)); // Do what you want with the array of results
...