我不會用redux-saga
,因爲它沒有這樣做,你需要什麼樣的能力。
相反,設立專賣店,API層和其他東西的時候配置API層調用做處理上發生的每個錯誤。
報告API層的示例調用錯誤處理程序。
const conf = {
onError:() => {},
}
api.onError = (cb) => {
conf.onError = cb;
}
api.get = (url) => {
fetch(url)
.then(response => {
if (response.ok === false) {
return conf.onError(response);
}
return response;
})
// Network error
.catch(conf.onError)
}
配置應用程序。
import store from './store';
// Configure your API wrapper and set error callback which will be called on every API error.
api.onError((error) => {
store.dispatch({
type: 'API_ERROR',
payload: error,
});
});
// In you reducers...
isAuthorized(state, action) {
if (action.type === 'API_ERROR' && action.payload.statusCode === 401) {
return false;
}
return state;
}
然後,調用API爲通常情況下,如果發生錯誤,動作被分配到存儲,你可能會或可能不會對這一行動作出反應。