我想在redux-saga上运行并行效果,如果发生错误则不抛出异常。
在以下情况下,使用redux-saga的all
效果
其中一种效果在所有效果完成之前就被拒绝了:在生成器内部抛出了拒绝错误。
基本上,我想等待所有效果完成以触发动作。我想做这样的事情,但是用其他东西代替all
:
export function* getSaga() {
yield put(request());
try {
yield all([fetchItems1, fetchItems2, fetchItems3]);
// Wait for all to resolve or get rejected, then dispatch succeed.
yield put(actions.succeeded());
} catch (e) {
// This should never happen.
}
}
我尝试使用fork
,但是如果一项失败,它会取消所有其他任务。而且我尝试使用spawn
,但它并不等待任务完成以分发succeeded
。
使用常规JS,有一个名为reflect的模式,我想将其与传奇一起应用。
我们如何实现?
谢谢
答案 0 :(得分:1)
遵循链接的堆栈溢出问题的答案,您可以轻松创建reflect
传奇,并以相同的方式使用它:
function* reflect(saga) {
try {
return { v: yield call(saga), status: 'fulfilled' }
} catch (err) {
return { e: err, status: 'rejected' }
}
}
...
yield all([fetchItems1, fetchItems2, fetchItems3].map(reflect));