redux传奇:如何在并行任务中忽略一个错误并获得其他响应



这是我的代码,并行获取几个报告:

function fetchSingleReportRequest(reportId) {
return axios.get(`/api/${reportId}`)
}
function* fetchReportsInfo({payload: {data: reportIds}}) {
try {
const responses = yield all(reportIds.map(reportId => 
call(fetchSingleReportRequest, reportId)))
} catch (e) {
}
}

但是,一个或多个报告可能不存在,但不会影响结果,错误可以忽略。

但是,当404获取发生时,它进入了catch块,我如何才能获得其他成功的响应?

将try-catch逻辑下降到匿名函数中。这样,您就可以定义每次呼叫失败时要做什么。例如,在这里,我只是在失败时返回null

function fetchSingleReportRequest(reportId) {
return axios.get(`/api/${reportId}`)
}
function* fetchReportsInfo({payload: {data: reportIds}}) {
const responses = yield all(reportIds.map(reportId => {
try {
return call(fetchSingleReportRequest, reportId)
} catch (e) {
return null;
}
}));
}

发生这种情况是因为您没有处理Promise本身中的错误。

您只需要在fetchSingleReportRequest中向axios请求添加一个catch块。

例如,您可以编写以下内容:

function fetchSingleReportRequest(reportId) {
return axios.get(`/api/${reportId}`)
.catch(() => {
return null
})
}
function* fetchReportsInfo({payload: {data: reportIds}}) {
try {
let responses = yield all(reportIds.map(reportId => 
call(fetchSingleReportRequest, reportId)))
responses = responses.filter((res) => res !== null)
} catch (e) {
}
}

相关内容

最新更新