Reactjs 使用Redux saga正确处理操作

Reactjs 使用Redux saga正确处理操作,reactjs,redux,react-redux,redux-saga,Reactjs,Redux,React Redux,Redux Saga,我是Reactjs新手,如果有什么问题,请告诉我。 关于异步redux传奇,我有一件事要问。 基本上,我有一个简单的操作:当我选择一个项目=>删除它时,如果成功,调用获取所有项目的api,再次 像这样:(这发生在我的传奇故事中) 我的想法是,我希望它是连续的,我的意思是,当我删除项目时,“getall”操作必须在前一个操作完成时“等待”,然后轮到它。 有什么建议吗 每当上一个操作完成时,“getall”操作必须“等待”, 然后轮到它了 只需使用全权重forksaga流程,并使用异步操作构建您自己

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

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

每当上一个操作完成时,“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)
  // ...
}
每当上一个操作完成时,“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)
  // ...
}

对不起,你能澄清一下你的传奇故事是如何发展的吗?操作删除=>服务删除=>服务获取全部=>操作获取全部=>???别的?它应该停在这里吗?@Ematipico是的,是的。我的问题是,操作getall应该在服务/操作delete完成之前等待。当您像这样使用yield时,后续调用将等待yield返回一些内容。所以,当你的代码被设计出来时,它已经在按顺序运行了。对不起,你能澄清一下你的传奇故事的流程吗?操作删除=>服务删除=>服务获取全部=>操作获取全部=>???别的?它应该停在这里吗?@Ematipico是的,是的。我的问题是,操作getall应该在服务/操作delete完成之前等待。当您像这样使用yield时,后续调用将等待yield返回一些内容。因此,随着代码的布局,它已经按顺序运行了。