我们可以将 race 与 takeEvery 一起使用吗?
Can we use race with takeEvery ?
我正在使用 saga,我试图在 takeEvery 和超时之间实现竞争。如果用户没有执行某项操作,我想发送 DISMISS 操作(超时)。但如果用户已经完成了操作,我不想发送 DISMISS 操作。
我没有成功,所以我的问题是,我可以用 takeEvery 进行比赛吗?
const id = 5 // just for the example
const {a, b} = yield race({
a: yield takeEvery(DISMISS, function* ({payload}) {
if (payload === id) {
// find a way to win the race
}
// continue to listen
}),
b: yield call(delay, 6000),
})
我找到了你不应该使用 takeEvery 而应该使用一段时间的正常调用的解决方案:
答案:
const {timeout} = yield race({
_: call(yourFunction$, param),
timeout: call(delay, alertDelay),
})
与:
function* yourFunction$(param) {
let yourCond = true
while (yourCond) {
const action = yield take(YOUR_ACTION_TYPE)
// do what you want
}
}
我正在使用 saga,我试图在 takeEvery 和超时之间实现竞争。如果用户没有执行某项操作,我想发送 DISMISS 操作(超时)。但如果用户已经完成了操作,我不想发送 DISMISS 操作。
我没有成功,所以我的问题是,我可以用 takeEvery 进行比赛吗?
const id = 5 // just for the example
const {a, b} = yield race({
a: yield takeEvery(DISMISS, function* ({payload}) {
if (payload === id) {
// find a way to win the race
}
// continue to listen
}),
b: yield call(delay, 6000),
})
我找到了你不应该使用 takeEvery 而应该使用一段时间的正常调用的解决方案:
答案:
const {timeout} = yield race({
_: call(yourFunction$, param),
timeout: call(delay, alertDelay),
})
与:
function* yourFunction$(param) {
let yourCond = true
while (yourCond) {
const action = yield take(YOUR_ACTION_TYPE)
// do what you want
}
}