redux – 运行并行传奇效果而不取消其中任何一个

我想用redux-saga运行并行效果,如果发生错误则不抛出.

使用redux-saga的所有效果,如果:

One of the Effects was rejected before all the effects complete: throws the rejection error inside the Generator.

基本上,我想等待所有效果完成以触发动作.我想做这样的事情,但用其他东西取而代之:

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但它不等待任务完成派遣成功.

使用常规JS,有一个名为reflect的模式,我想用saga来应用.

我们怎样才能做到这一点?

谢谢

最佳答案 根据链接stackoverflow问题的答案,您可以轻松创建反射传奇并以相同的方式使用它:

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));

工作示例:https://codesandbox.io/s/y2vx74jzqv

点赞