【发布时间】:2021-09-09 11:33:10
【问题描述】:
我有一个传奇在其中多次调用:
function* membersInfoSaga({ payload }) {
const endpoints = [
api.fetchNotifications,
api.fetchPosts,
api.fetchMessages,
api.fetchActivities
]
const responses = yield all(endpoints.map(endpoint => {
try {
return call(endpoint, payload.memberId, payload.page, payload.pageSize)
} catch (error) {
return { data: {} }
}
}))
当一个呼叫得到 400 作为响应时,我希望它为其他呼叫继续,并为失败的呼叫返回 { data: {} }。
我正在使用 Fetch API 进行调用。这是我的 api.js:
function callApi(endpoint, options, unauthorized, isRefreshToken) {
const URL = BASE_URL + endpoint
const ACCESS_TOKEN = localStorage.getItem("access_token")
if (!options) options = {}
options["headers"] = {
"Content-Type": "application/json",
"Accept": "application/json"
}
if (!unauthorized) {
options.headers["Authorization"] = `Bearer ${ACCESS_TOKEN}`
}
return fetch(URL, options)
.then((response) => response.json())
.then((response) => {
if (response.code >= 200 && response.code <= 299) {
return Promise.resolve(response)
} else if (response.code === 401) {
if (isRefreshToken) {
store.dispatch({ type: actionTypes.AUTH_REFRESH_FAILED })
} else {
store.dispatch({
type: actionTypes.INVALID_TOKEN,
payload: { error: response.error.message }
})
return { error: response.error.message }
}
} else {
return Promise.reject(response.error.message)
}
})
.catch((error) => {
return Promise.reject(error)
})
}
这是我在 saga 调用方法中调用的函数:
const fetchNotifications = (memberId, page, pageSize) => callApi(`notifications/${memberId}?page=${page}&page_size=${pageSize}`)
【问题讨论】:
标签: javascript reactjs fetch-api redux-saga