В моем приложении 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;
}));
Я не могу получить печать «не удалось получить токен» при сбое запроса.Я делаю больше обработки ошибок там, поэтому мне нужно, чтобы какой-то код запускался при сбое запроса.