1

您好,我在其中一个 React 组件中有一个 onChange 回调,它通过这样的地图调用多次分派一个动作:

onChange: (items, newRatio) => {
  items.map( item => {
    dispatch(itemActions.updateStart({
      ...item,
      adjusted_ratio: _.round(item.adjusted_ratio + newRatio, 1),
    }))
  })
}

我有一个像这样的“项目”的传奇:

  // Updating an Item 
  function* watchUpdate() {
    while(true) {
      const { record: unsavedItem, } = yield take(itemTypes.ITEMS_UPDATE_START);
      const task = yield fork( updateItemDbCrud, unsavedItem )
    }
  }
  function* updateItemDbCrud(unsavedItem) {
    const savedItem = yield call( api.update, unsavedItem );
    const result = yield put ( itemActions.updateSuccess(savedItem) )
  }

  export default [watchUpdate]

换句话说,我预计每当 ITEMS_UPDATE_START 操作被调度时,它会派生一个新的 updateItemDbCrud 并继续执行一些 API 工作,但我注意到只有调度序列中的第一个通过。我用错了叉子吗?

谢谢!

4

1 回答 1

3

这是一个已知问题 ( https://github.com/yelouafi/redux-saga/issues/50 ),它与 ​​Promise 的性质及其在 Redux Sagas 核心中的使用有关。

它已在 0.6 版本中解决

如果您想了解更多关于导致问题的原因,我建议您阅读上述 github 问题以及 Jake Archibalds 关于任务、微任务、队列和计划的文章。

https://jakearchibald.com/2015/tasks-microtasks-queues-and-schedules/

于 2016-02-05T19:54:03.030 回答