내 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)
];
};
상태가 (200)는 다음 직접 응답을 반환하는 경우 기능 fetchData에서 HTTP 응답 상태에 대한 검사가,있다을 읽어 보시기 바랍니다. 그러나 서버 측에서 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에서 유효하지 않습니다.
누구나이 케이스의 코드를 더 잘 디자인하는 방법을 제안 할 수 있습니까?