使用takeLatest如何取消Saga中的任务?
How to cancel the task in Saga if takeLatest is used?
我在应用程序中有很多表单并重复使用相同的表单,但有不同的 'id' 我创建了一个组件,具有以下传奇:
export default function FormSaga(SEND_REQUEST) {
return function* () {
yield takeLatest(SEND_REQUEST, submit);
};
}
但是如果我需要中止表单提交,Saga 的手册为我提供了这个解决方案:
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)
}
}
我试过这个:
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 以便取消任务有效?谢谢!
猜猜找到了解决方案,看起来可行。
const task = yield takeLatest(SEND_REQUEST, submit);
yield take(ABORT_REQUEST);
yield cancel(task);
我在应用程序中有很多表单并重复使用相同的表单,但有不同的 'id' 我创建了一个组件,具有以下传奇:
export default function FormSaga(SEND_REQUEST) {
return function* () {
yield takeLatest(SEND_REQUEST, submit);
};
}
但是如果我需要中止表单提交,Saga 的手册为我提供了这个解决方案:
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)
}
}
我试过这个:
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 以便取消任务有效?谢谢!
猜猜找到了解决方案,看起来可行。
const task = yield takeLatest(SEND_REQUEST, submit);
yield take(ABORT_REQUEST);
yield cancel(task);