Есть несколько способов достичь этого.
Один из способов , если вы хотите, чтобы поток getAuthUser оставался активным, - преобразовать обещание в наблюдаемое с помощью изоператор .Это позволит вам продолжить поток и реагировать на ошибки / обрабатывать успех для всего потока.Вы также можете указать, где в потоке реагировать на конкретные ошибки, с помощью оператора catchError .
Что-то похожее на:
this.userService.getAuthUser()
.pipe(
catchError(err => {
// throw an error how you like, see the 'throw' operator
// can also create with other operators like 'of'
}),
switchMap(auth =>
from( // will detect promise and return observable
this.userService.updateUser(res.id, <User>({
name: 'Sample Name'
}))
)
),
catchError(err => {
// throw an error how you like, see the 'throw' operator
// can also create with other operators like 'of'
})
).subscribe(
(res) => {
// if you were expecting data at this point
}, (err) => {
// if you threw the error
}
)
Другой способ если вам не требуется, чтобы поток оставался активным, вы можете преобразовать Observable из первого потока в Promise с помощью .toPromise()
.Отсюда у вас есть два типичных пути для подражания.Вы можете использовать async / await или просто связать обещания.
Для асинхронного ожидания, что-то похожее на:
// the method will have to be async for await to not show errors
const authUser = await this.userService.getAuthUser().toPromise();
// determine if you should update
// if so
const updateUserResult = await this.userService.updateUser(res.id, <User>({name: 'Sample Name'}));