首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果使用了takeLatest,如何取消Saga中的任务?

如果使用了takeLatest,如何取消Saga中的任务?
EN

Stack Overflow用户
提问于 2021-04-02 05:15:57
回答 1查看 67关注 0票数 0

我在应用程序中有许多表单,为了重用相同的表单,但使用不同的'id‘,我创建了一个组件,具有以下传奇:

代码语言:javascript
复制
export default function FormSaga(SEND_REQUEST) {
  return function* () {
    yield takeLatest(SEND_REQUEST, submit);
  };
}

但是如果我需要放弃表单提交,Saga的手册为我提供了这个解决方案:

代码语言:javascript
复制
function* main() {
  while ( yield take('START_BACKGROUND_SYNC') ) {
    // starts the task in the background
    const bgSyncTask = yield fork(bgSync)

    // wait for the user stop action
    yield take('STOP_BACKGROUND_SYNC')
    // user clicked stop. cancel the background task
    // this will cause the forked bgSync task to jump into its finally block
    yield cancel(bgSyncTask)
  }
}

我试过这个:

代码语言:javascript
复制
export default function FormSaga(SEND_REQUEST, ABORT_REQUEST) {
  return function* () {
    while (yield take(SEND_REQUEST)) {
      const submitTask = yield fork(submit);

      yield take(ABORT_REQUEST);
      yield cancel(submitTask);
    }
  };
}

但它不起作用。

如果有人可以帮我重写我的takeLatest,这样任务取消就可以工作了?谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-05 04:18:28

我猜找到了解决方案,看起来是可行的。

代码语言:javascript
复制
    const task = yield takeLatest(SEND_REQUEST, submit);

    yield take(ABORT_REQUEST);
    yield cancel(task);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66911663

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档