我正在使用传奇,我尝试在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),
})
答案 0 :(得分:1)
我找到了你不应该使用takeEvery的解决方案,但是暂时使用普通电话:
答案:
const {timeout} = yield race({
_: call(yourFunction$, param),
timeout: call(delay, alertDelay),
})
with:
function* yourFunction$(param) {
let yourCond = true
while (yourCond) {
const action = yield take(YOUR_ACTION_TYPE)
// do what you want
}
}