Решением было бы изменить forkJoin
на merge
, чтобы вместо получения одного события после выполнения всех запросов вы получали событие после завершения каждого из них.
Если вы 'например:
waitForAll() {
this.values = [];
this.loadAllAtOnce([100, 200, 300, 400, 3000])
.subscribe(values => {
this.values = values;
});
}
loadAllAtOnce(values: number[]) {
return forkJoin(
values.map(x => of (x).pipe(delay(x)))
).pipe(
tap(values => {
console.log(values);
})
);
}
Можно переписать так:
asTheyCome() {
this.values = [];
this.loadAsSoonAsAvailable([100, 200, 300, 400, 3000])
.subscribe(value => {
this.values.push(value);
});
}
loadAsSoonAsAvailable(values: number[]) {
return merge(
...values.map(x => of (x).pipe(delay(x)))
).pipe(
tap(value => console.log(value))
);
}
Рабочий пример можно найти здесь .