Redux-Saga - 在触发取消操作时取消所有其他传奇
Redux-Saga - cancel all other sagas when cancel action is fired
在我的项目中,我有一个 root saga,它监视多个动作并进行一些 API 调用。
在某些情况下,我想取消那些传奇和 API 调用。
现在是这样组成的:
export default function*() {
yield all([
takeLatest(ActionTypes.GET_ACTION_ONE, getOneSaga),
takeLatest(ActionTypes.GET_ACTION_TWO, getTwoSaga),
]);
}
我有 ActionTypes.CANCEL
,当它被解雇时,我希望取消任何其他传奇(getOneSaga
和 getTwoSaga
),我想管理 yield cancelled()
取消 API 个内部调用。
那么,我该如何组合我的所有操作和取消操作。
这是我在 this issue
的帮助下找到的解决方案
export default function*() {
while (true) {
const allTasks = yield all([
takeLatest(ActionTypes.GET_ACTION_ONE, getOneSaga),
takeLatest(ActionTypes.GET_ACTION_TWO, getTwoSaga),
]);
yield take(ActionTypes.CANCEL);
yield all(allTasks.map((task: Task) => cancel(task)));
}
}
你可以使用race
效果:
export default function* () {
yield race([
take(ActionTypes.CANCEL),
all([
takeLatest(ActionTypes.GET_ACTION_ONE, getOneSaga),
takeLatest(ActionTypes.GET_ACTION_TWO, getTwoSaga),
]),
]);
}
Creates an Effect description that instructs the middleware to run a Race between multiple Effects. When resolving a Race, the middleware automatically cancels all the losing Effects
在我的项目中,我有一个 root saga,它监视多个动作并进行一些 API 调用。 在某些情况下,我想取消那些传奇和 API 调用。
现在是这样组成的:
export default function*() {
yield all([
takeLatest(ActionTypes.GET_ACTION_ONE, getOneSaga),
takeLatest(ActionTypes.GET_ACTION_TWO, getTwoSaga),
]);
}
我有 ActionTypes.CANCEL
,当它被解雇时,我希望取消任何其他传奇(getOneSaga
和 getTwoSaga
),我想管理 yield cancelled()
取消 API 个内部调用。
那么,我该如何组合我的所有操作和取消操作。
这是我在 this issue
的帮助下找到的解决方案export default function*() {
while (true) {
const allTasks = yield all([
takeLatest(ActionTypes.GET_ACTION_ONE, getOneSaga),
takeLatest(ActionTypes.GET_ACTION_TWO, getTwoSaga),
]);
yield take(ActionTypes.CANCEL);
yield all(allTasks.map((task: Task) => cancel(task)));
}
}
你可以使用race
效果:
export default function* () {
yield race([
take(ActionTypes.CANCEL),
all([
takeLatest(ActionTypes.GET_ACTION_ONE, getOneSaga),
takeLatest(ActionTypes.GET_ACTION_TWO, getTwoSaga),
]),
]);
}
Creates an Effect description that instructs the middleware to run a Race between multiple Effects. When resolving a Race, the middleware automatically cancels all the losing Effects