У меня есть приложение angular 4, которое отправляет несколько запросов одновременно один за другим в API, защищенный OAuth2, я сталкиваюсь с проблемой, когда запрос завершается с ошибкой с кодом состояния 401, мне нужно создать новый токен доступа и повторно инициировать тот же запрос к API и вернуть ответ методу, который его ожидает.
1- Все запросы терпят неудачу один за другим - поэтому, чтобы удержать другой запрос для продолжения, я добавил цикл, который удерживает запрос, поступающий на сервер, когда идет генерация токена.
2- Чтобы инициировать запрос, я снова добавил строку next.handle(request)
в блок, но она не работала, затем я попытался вызвать метод this.intercept(request,next)
, даже если он не работал, после этого последний добавленный мной подход заключался в повторной обработке запроса в блоке ошибок. так что теперь код метода перехвата выглядит так, как показано ниже, но затем я понял, что запрос даже не обрабатывается дальше, даже если я попытаюсь обработать запрос. Есть несколько руководств, просто предлагающих next.handle(request)
, но в моем случае это не работает должным образом.
Только мне удалось обработать запросы, которые приходят после неудачного запроса, потому что до этого генерируется новый токен доступа, но неудавшийся запрос просто отбрасывается.
Пожалуйста, смотрите поток кода в связь!
Я уже потратил много времени на отладку
Я смог добиться этого, добавив Observable.fromPromise
в метод перехвата, а затем вызвав метод, который возвращает обещание, и метод рекурсивно вызывался до тех пор, пока я не получу токен обновления, но добавляя задержку между каждым вызовом, чтобы я не закончил до вызова рекурсивно несколько раз.
Пожалуйста, обратитесь к этому связь для моего кода. Пожалуйста, прокомментируйте, если возникнут какие-либо проблемы.
Я изменил подход и удалил раздел тайм-аута, который приводит к сбою всех одновременных запросов, но токен обновляется, и все последующие запросы, которые были инициированы и не выполнены, повторно инициируются.