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