Сценарий:
Сервис должен загрузить информацию об участнике. Для этого ему необходимо 1) загрузить идентификатор участника и 2) загрузить подробную информацию. Шаг 1 является обязательным (если он завершается неудачно, весь процесс должен вернуть ошибку), шаг 2 является необязательным (если он терпит неудачу, возвращается запись только с идентификатором).
Среда: угловая 6, машинопись
Код:
public getMemberId() : Observable<string> { .. doing some http request ...}
public getMemberInfo(memberId : int) : Observable<Member> {
... some code ...
return new Member(loaded_id, loaded_name);
}
// expected final usage:
loadUser().subscribe(
res => ... at least member-id was loaded
err => ... member-id was not loaded
)
// the not-working implementation:
public loadUser() : Observable<Member> {
this.getMemberId().pipe(
flatMap(id => getMemberInfo(id)),
catchError(err =>
new Member(id, "John Doe")) // how to get 'id' here??
}
Я думаю, что "flatMap" - правильное преобразование для меня, поскольку я пытаюсь преобразовать идентификатор участника в полную информацию об участнике. Однако я не знаю, как получить в id
из успешно завершенной функции getMemberId()
и передать его в качестве параметра в блоке catchError
, когда getMemberInfo()
не удается. catchError
имеет только объект ошибки в качестве параметра, однако мне нужно как-то получить доступ к результату верхнего Observable.