Я знаю, что этот вопрос задавался раньше здесь .Но принятое решение не работает для меня, или я не могу его хорошо понять.
Я использую ng-7 У меня есть простой вариант использования:
У меня 2 API, 2-й -зависит от 1-го ответа.Я подписываюсь на результат 1-го API, а затем с помощью pipe подписываюсь на 2-й результат API.
Мой код выглядит следующим образом:
this._SomeService
.addUserToDb(payload)
.pipe(
map(res => res),
mergeMap(db1Response =>
this._SomeService.addUserToDb2(db1Response
)
),
catchError(errodb1 => {
return Observable.throw(new
Error(errorSso));
})
)
.subscribe(
resDb2 => {
// Here I get response of addUserToDb2
},
errDb2 => {
}
)
Теперь перед подпиской на второй ответ API я хочу подписаться надругое наблюдаемое высказывание:
this._tokenService.getToken.pipe (
)
И хотите использовать его ответ в сервисе 2. Такой, что:
API1 => token => API2
Пожалуйста, предложите, как реализовать.
ОБНОВЛЕНИЕ:
Я пытался реализовать, ниже моя реализация:
this._service.addUserToDB1(payload).pipe(
map(resp => this.resDB1 = resp) // Adding to global variable because I need this response while subscribing to DB2 service.
,mergeMap(resdb1=>this._tokenService.getToken.pipe(
mergeMap(token => this._service.addUserToDb2(
this.resDB1,
this.organizationId,
this.practitionerId,
token
),
catchError(errorToken => {
return Observable.throw(new Error(errorToken));
})),
)
),
catchError(errordb1 => {
return Observable.throw(new Error(errordb1));
})
).subscribe (
resdb2Response =>
{
},
errdb2 => {
}
)
Может ли кто-нибудь подтвердить правильность вышеприведенной реализации или предложить правильный путь?