我想使用redux-saga运行并行效果,如果发生错误则不抛出异常。
all如果满足以下条件,则使用redux-saga 的效果:
在所有效果完成之前,其中一种效果被拒绝:将拒绝错误引发到生成器内部。
基本上,我想等待所有效果完成以触发动作。我想做这样的事情,但用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.
}
}
Run Code Online (Sandbox Code Playgroud)
我尝试使用,fork但是如果一项失败,它将取消所有其他任务。而且我尝试使用spawn它,但是它并不等待任务完成发送succeeded。
使用常规JS,有一种称为反射的模式,我想将其应用到传奇中。
我们如何实现这一目标?
谢谢
根据链接的 stackoverflow 问题的答案,您可以轻松创建一个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));
Run Code Online (Sandbox Code Playgroud)
工作示例: https: //codesandbox.io/s/y2vx74jzqv
| 归档时间: |
|
| 查看次数: |
200 次 |
| 最近记录: |