угловые 6 возвращают результат подписки forkJoin (rxJs 6) - PullRequest
0 голосов
/ 25 сентября 2018

Простой кейс и ОК:

const observables = [];
for (let i = 0; i < this.originalData.length; i++) {
      observables.push( this.dashboardService.getDetails(this.id1[i], this.id2[i])
       };

forkJoin(...observables).subscribe(dataGroup => {
    console.log(dataGroup.id);
});

Консоль 1 2 3 4 5

Более сложный кейс для меня и КО:

private todo(foot) {
    const observables = [];
    for (let i = 0; i < this.originalData.length; i++) {
      observables.push( this.dashboardService.getDetails(this.id1[i], this.id2[i])
    };

    forkJoin(...observables).subscribe(dataGroup => {
      console.log(dataGroup);
      // How to put all dataGroup id in foot.param ?
    });

    return this.dashboardService.getFoo(foot);
}

код выполняет это:

return this.dashboardService.getFoo(foot);

до этого:

console.log(dataGroup);

Как дождаться окончания подписки и добавить / изменить все idGroup id в foot.paramдо повторной настройки (в конце)?

1 Ответ

0 голосов
/ 25 сентября 2018

Функция todo должна быть сама по себе асинхронной, поэтому она должна возвращать Observable:

private todo(foo): Observable<any> {
    const observables = [];
    for (let i = 0; i < this.originalData.length; i++) {
      observables.push( this.dashboardService.getDetails(this.id1[i], this.id2[i])
    };

    // notice that dataGroup is an array of latest value of all observables
   return forkJoin(observables).map((dataGroup: any[]) => {
      // do whatever you want to foo before calling the function
      // remember you need to also merge if getFoo returns an observable as well
      // but I assume it doesn't
      return this.dashboardService.getFoo(foo);
    });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...