Как заменить flatMap и mergeMap в rxjs 6.4.0 Angular - PullRequest
0 голосов
/ 15 февраля 2019

В моем приложении Angular 7 есть перехватчик, который отправляет запрос на получение токена перед повторной отправкой запроса.Если одновременно поступает несколько запросов, все они отправят запрос на получение токена.Чтобы избежать этого, я делюсь наблюдаемой, чтобы результат для получения токена был общедоступным и чтобы был сделан только один запрос для получения токена.

Я создаю общую наблюдаемую следующим образом

this.authService.sharedToken =   this.authService.getToken().pipe(share());

Затем я делаю запрос

 return auth.sharedToken.flatMap((res) => {

     auth.saveTokenToLocalStorage(res);
     return this.getRequestWithAuthentication(request, next, auth);

 }).catch(function (err) {// I handle errors here
 }

Проблема в том, что flatMap устарела и замена его на mergeMap также не будет работать.Кажется, сейчас MergeMap - это отдельная функция.Так как я могу заставить приведенный выше код работать.

Я использую rxjs 6.4.0 и Angular 7.2.4

Спасибо.

РЕДАКТИРОВАТЬ:

используя новый подход к конвейеру, у меня есть следующее:

  return auth.sharedToken.pipe(
            mergeMap((res) => {

                auth.saveTokenToLocalStorage(res);
                return this.getRequestWithAuthentication(request, next, auth);
            }), catchError(function (err) {
                console.log("failed to get token")
                return EMPTY;
            }));

Я не могу получить печать «не удалось получить токен» при сбое запроса.Я делаю больше обработки ошибок там, поэтому мне нужно, чтобы какой-то код запускался при сбое запроса.

1 Ответ

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

С RxJS 5.5 введен новый синтаксис оператора pipe RxJS 6.0 стало обязательным для использования поверх старого синтаксиса.Таким образом, вам придется заменить свой код на

.pipe(
    mergeMap(...)
)
...