завершить с flatMap в угловой - PullRequest
       0

завершить с flatMap в угловой

0 голосов
/ 07 февраля 2019

Я использую угловые 5 и rxjs.Я делаю 2 сервисных звонка, один зависит от других результатов.Я делаю это с помощью flatMap.Я также хочу сделать некоторые операции после того, как оба вызова API были сделаны.Я использую finalize для этого.Мой код выглядит следующим образом:

this.myservice.api1(param1).pipe(takeUntil(this.destroyed$), finalize(() => {
//do something after both api calls are completed
},
flatMap((result1) => {
    //do some operation and create object x(this.objx)
    return this.myservice.api2(param1);
})
).subscribe((result2) => {
    //do something based on result2 and this.objx
})

Блок finalize, однако, выполняется только после первого вызова API.С одним вызовом API выполняется финализация, но с flatMap он выполняется только после первого вызова API.Пожалуйста, дайте мне знать, если я что-то ошибаюсь.

1 Ответ

0 голосов
/ 07 февраля 2019

Я полагаю, что this.myservice.api1(param1) - это обычный http-запрос, который отправляется только один раз, а затем завершается.

Я бы предложил использовать switchMap для этого:

this.myservice
    .api1(param1)
    .pipe(
        takeUntil(this.destroyed$),
        switchMap((result1) => {
            //do some operation and create object x(this.objx)
            return this.myservice.api2(param1);
        }),
        finalize(() => {
            //do something after both api calls are completed
        },
    ).subscribe((result2) => {
        //do something based on result2 and this.objx
    })

Завершить будетвызываться при завершении цепочки или ошибках.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...