Чтобы обработать 401 неавторизованный запрос, я попытался обернуть все свои запросы API с помощью errorHandler:
const apiGet (props) = ajax({
headers,
method: 'GET',
...props
}).catch(res => {
if (res.status === 401)
return Observable.of(unauthorizedAction();
else
return Observable.throw(res);
});
В идеале я мог бы использовать его следующим образом, зная, что 401 вызовет unauthorizedAction()
, а, скажем, 500 будет обрабатываться handleOtherErrors
.
action.ofType(SOME_ACTION) =>
apiGet(something)
.map(res => doSomethingWithResponse(res))
.catch(handleOtherErrors);
Однако с приведенной выше настройкой проблема возникает, когда я получаю ответ 401. Как и ожидалось, errorHandler возвращает неавторизованное действие, но затем продолжает отображать действие и пытаться что-то сделать с ответом, вместо того, чтобы отправлять это действие и завершать цепочку Observable.
Итак, мой вопрос: как я могу сделать что-то подобное в своем обработчике ошибок?
.catch(res => {
if (res.status === 401)
// Dispatch an action, but stop the rest of the chain
else
return Observable.throw(res);
}).map(...restOfChain)
.catch(additionalErrorHandlerForNon401);