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

时间:2018-06-25 11:32:49

标签: redux redux-saga

我想在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的模式,我想将其与传奇一起应用。

我们如何实现?

谢谢

1 个答案:

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

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