运行平行的传奇故事效果而不取消任何一个

ale*_*ngn 6 redux redux-saga

我想使用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,有一种称为反射的模式,我想将其应用到传奇中。

我们如何实现这一目标?

谢谢

Mar*_*lec 2

根据链接的 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