Я пытаюсь использовать условный оператор rxjs. Я проверяю, хранятся ли данные в local storage
, верните это, если нет, сделайте 2 HTTP-вызова, чтобы получить необходимые данные и вернуть их.
Вот мой код:
// making nested API calls
loggedInUserDetails$ = this._getPoid().pipe(
concatMap((userData: any) => this._userData(userData)),
map((userDetails: any) => userDetails.legalName.nameLastFirst),
tap((user: string) => this._storage.saveUserInStorage(user)),
catchError(() => of('some dummy name')),
);
storedUserData$ = of(this._storage.getUserFromStorage());
loggedInUsername$ = of(this._storage.getUserFromStorage()).pipe(
mergeMap((username: string) =>
iif(
() => Boolean(username),
this.storedUserData$,
this.loggedInUserDetails$,
),
),
tap(console.log),
);
loggedInUsername$.subscribe(data => console.log(data));
Приведенный выше код возвращает Превышен максимальный размер стека вызовов
Observable.js: 54 RangeError: Превышен максимальный размер стека вызовов в MergeMapSubscriber.push ../ node_modules / rxjs / _esm5 / internal / OuterSubscriber.js.OuterSubscriber.notifyError (OuterSubscriber.js: 12) в InnerSubscriber_modules ../ rxjs / _esm5 / internal / InnerSubscriber.js.InnerSubscriber._error (InnerSubscriber.js: 18) в InnerSubscriber.push ../ node_modules / rxjs / _esm5 / internal / Subscriber.js.Subscriber.error (Subscriber.js: 59) в TapSubscriber.push ../ node_modules / rxjs / _esm5 / internal / Operators / tap.js.TapSubscriber._error (tap.js: 61) в TapSubscriber.push ../ node_modules / rxjs / _esm5 / internal / Subscriber.js.Subscriber .error (Subscriber.js: 59) в