使用Redux-saga正确处理操作

时间:2017-06-30 02:26:22

标签: reactjs redux react-redux redux-saga

我是Reactjs的新手,所以如果有什么不对的地方,请告诉我 关于异步,redux-saga,我有一件事要问 基本上,我有一个简单的动作:当我选择一个项目=>删除它,如果成功,再次调用获取所有项目的api 像这样:(这发生在我的传奇中)

export function* delete (action)
   yield call(service.deleteanitem)
   ....
   yield call(service.getall)
   yield put {type: 'getall'}

我的想法是,我希望它是顺序的,我的意思是,当我删除项目时,“getall”动作必须在上一个动作完成时“等待”,然后轮到它。
有什么建议吗?

1 个答案:

答案 0 :(得分:0)

  

a' getall'行动必须等待'无论何时完成上一个动作,   轮到它了。

只需使用全权重fork saga流程,并使用异步操作构建自己的自定义执行流程。

涵盖任何具有交叉等待依赖关系的情况的示例:

function* sagaProc() {
  let controlPromise, controlResolve;
  while(true) {
    // ...
    controlPromise = new Promise(resolve => (controlResolve = resolve))
    socket.on('message', msg => controlResolve(msg))
    yield put({ type: 'SOME_REQUEST' })
    yield call(() => fetch('SOME_URL'))
    const message = yield call(() => controlPromise)
    yield put({ type: 'SOME_RESPONSE', ...message })
    // ...
  }
}

function* mainSaga() {
  // ...
  yield fork(sagaProc)
  // ...
}