在我的React應用程序中,有一個Saga調用後端API來檢索某些圖表數據。請閱讀源代碼在Redux-saga中,如何在一個傳奇故事中調用傳奇?
function fetchData() {
return fetch(`${config.base}dashboard_charts.json`)
.then((response) => {
if (response.status === 200) {
return response.json();
} else if (response.status === 403) {
return 'logon';
}
});
}
function * getData (action) {
try {
const charts = yield call(fetchData);
if (charts === 'logon') {
yield logon();
} else {
yield put({ type: UPDATE_DASHBOARD_CHART, charts });
}
} catch (error) {
yield put({ type: UPDATE_DASHBOARD_CHART, charts: [] });
}
}
function * logon (action) {
yield auth();
}
export default function * portfolio() {
yield [
takeEvery(FETCH_DASHBOARD_CHART, getData)
];
};
有反對的功能fetchData HTTP響應狀態的檢查,如果狀態爲200,然後直接返回響應。但是,如果服務器端返回403,這意味着客戶端需要進行身份驗證,因此該程序將轉到auth()並執行登錄。
但是,http響應狀態代碼檢查在某種程度上是適用於所有API調用的通用功能。所以我不想在每個傳奇中重複這種代碼。爲此,我寫了一個服務「ResponseHandler所」進行分組響應代碼檢查裏面是這樣的:
export default function responseHandler (resp) {
if (resp.status === 401 || resp.status === 403) {
yield auth();
} else if (resp.status === 200) {
} else {
console.log('error handling');
}
};
它會叫的fetchData
return fetch(`${config.base}dashboard_charts.json`)
.then((response) => {
responseHandler(response);
});
內,但這種方法是從來沒有工作。 'yield auth()'在responseHandler中無效。
任何人都可以建議如何更好地設計這種情況下的代碼?