javascript - RXJS Angular - Kuinka kutsua funktiota foreach-silmukan lopussa, joka sisältää observables?


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-silmukan lopussa tarkistan muuttujan "i" arvon, ja jos se on suurempi kuin listan pituus, kutsun funktiota. Ongelma tässä on, että koska tilaan sisällä silmukkaa, i:n arvo ei aina ole oikeassa järjestyksessä ja funktiota kutsutaan liian aikaisin. Kuinka voin käydä foreach-silmukan läpi tilausten kanssa, ja sitten kutsua funktiotani, kun silmukka ja tilaukset ovat valmiit?

Vastaus #1

Oletko ajatellut forkJoin-metodia? Se ei välttämättä ole siistein tapa, mutta mielestäni se voi toimia. Tämä voi myös auttaa odottamaan havainnoitavan subscribea foreach-silmukan sisällä loppuun.

Vastaus #2

tarkista alla oleva koodi..

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);
    });