RXJS Angular — как вызвать функцию в конце цикла foreach, содержащую наблюдаемые?

this.attachmentList.forEach((attachment, i) => {
    this.service.getPageOfAttachment().flatMap(response =>
        this.service.download((JSON.parse(response['Content']).mediaUrl)))
        .subscribe(response => {
            }, error => (console.log(error)),
            () => {
                if (i > this.attachmentList.length - 1) this.getPdfSharp(pdfSharpByteArray, attachment.entityName, i);
            })
})

В конце цикла foreach я проверяю значение «i» и, если оно больше длины списка, вызываю функцию. Проблема в том, что, поскольку я подписываюсь внутри цикла, значение I не всегда находится в правильном порядке, и функция вызывается раньше. Как я могу выполнить итерацию цикла foreach с подписками внутри, а затем вызвать свою функцию, когда цикл и подписки будут завершены?


person dc922    schedule 30.08.2018    source источник


Ответы (2)


Вы думали о forkJoin? Может быть, не самый чистый, но я думаю, что он может работать. Также это может помочь ожиданию наблюдаемой подписки внутри foreach до завершения

person Jaime FH    schedule 30.08.2018

проверьте приведенный ниже код..

const _subscriptions = [];
  Observable.of(this.attachmentList)
    .subscribe((attachments) => {
      _subscriptions = attachments.map(element1 => {
        this.service.getPageOfAttachment()
          .flatMap(response => this.service.download((JSON.parse(response['Content']).mediaUrl)))
          .subscribe(response => { },
            error => (console.log(error)),
            completed => (console.log("completed...!!!")));
      });
    });
  Promise.all(_subscriptions)
    .then(() => {

        this.getPdfSharp(pdfSharpByteArray, attachment.entityName, i);
    });
person Iam Coder    schedule 09.10.2018