Как ждать завершения моей подписки Angular внутри цикла? - PullRequest
0 голосов
/ 28 февраля 2019

У меня есть приложение Angular 6, где я зацикливаюсь на массиве и создаю API для каждого элемента в массиве внутри моего компонента.Я хочу подождать, пока данные не будут получены, и вся логика внутри будет выполнена, прежде чем делать запрос для следующего элемента в массиве.Сейчас он просто делает несколько запросов на последний элемент в массиве.Как заставить цикл ждать ответ, прежде чем перейти к следующему запросу?

for (var index = 0; index < data.length; index++) {
    this.deviceService.getMeasurementData(data[index].id, this.authService.userSession.authToken, this.filterModel.fromDate, this.filterModel.toDate)
    .subscribe(data => {
               //logic where I transform data to be displayed in the view


    })

}

Я пытался реализовать решение ЭТО , но не могу заставить его работать, может быть, это проблема с версиями.Как я могу создать наблюдаемый / и т.д.заставить мой цикл ждать завершения обработки моих данных?

Большое спасибо!

1 Ответ

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

используйте операторы RxJs concatMap и toArray: concatMap ожидает завершения выполнения API, наблюдаемого перед обработкой следующего элемента.toArray собирает результаты, пока вся обработка не будет завершена.

from(data).pipe(
    concatMap(item => this.deviceService.getMeasurementData(item.id, this.authService.userSession.authToken, this.filterModel.fromDate, this.filterModel.toDate)),
    toArray()
).subscribe(responses => {
... // array of all the data returned from api
})
...