我们可以和takeEvery一起使用种族吗?

时间:2017-05-24 00:47:06

标签: javascript reactjs redux-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),
})

1 个答案:

答案 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 
  }
}