我想知道Redux Saga中实现以下行为的正确方法是什么:
我已经通过使用以下模式成功实现了它(很抱歉,我没有完整的代码示例,目前无法使用):
function* fetchData(dataType) {
const resp = yield call(MyApi.fetchData, dataType);
if(!resp.err) {
yield put(fetchDataSuccess, resp.data);
} else {
return resp.err;
}
}
function* mySaga() {
const errors = yield all([
call(fetchData, 'typeOne'),
call(fetchData, 'typeTwo),
call(fetchData, 'typeThree)
]);
// errors contains the returned errors
}
这是达到理想效果的最好方法吗?
答案 0 :(得分:0)
您可以使用fork
效果来同时发送请求
https://redux-saga.js.org/docs/advanced/ForkModel.html
所以您的代码将变成
function* fetchData(dataType) {
const resp = yield call(MyApi.fetchData, dataType);
if(!resp.err) {
yield put(fetchDataSuccess, resp.data);
} else {
return resp.err;
}
}
function* mySaga() {
yield fork(fetchData, 'typeOne');
yield fork(fetchData, 'typeTwo');
yield fork(fetchData, 'typeThree');
}
对于错误处理,您可以从生成器中抛出错误,并在主传奇中对其进行处理。