redux-saga 错过了一些快速发射的相同动作

redux-saga some of the rapid fired same actions missed

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

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

我有一个 "items" 的 Saga,就像这样:

  // 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 工作,但我注意到只有序列中的第一个派遣通过。我用叉子错了吗?

谢谢!

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

0.6版本已解决

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

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