首页 > 解决方案 > React redux saga - 使用种族完全没有效果

问题描述

我有以下传奇效果:

function* loginSaga() {
  const logoutTimeoutCreationDate: string | null = yield localStorage.getItem('logoutTimeoutCreationDate');

  let logoutTimeout: number;

  if (!logoutTimeoutCreationDate || +logoutTimeoutCreationDate + 5000 < new Date().getTime()) {
    yield localStorage.setItem('logoutTimeoutCreationDate', new Date().getTime().toString());

    logoutTimeout = yield 5000;
  } else {
    logoutTimeout = yield +logoutTimeoutCreationDate + 5000 - new Date().getTime();
  }
  
  yield race([
    function*() {
      yield delay(logoutTimeout);
      yield put(authActions.logout());
    },
    function*() {
      yield take(authActions.AUTH_LOGOUT);
    },
  ]);
}

之前的所有代码都yield race(..)按预期工作,但yield race(..)没有效果。甚至不存在的意思。我在两者中都插入console.log()了 s 行来检查它(在 内部function*() {...}) - 但没有得到任何安慰。

怎么了?

标签: reactjstypescriptreduxredux-saga

解决方案


您应该使用其他不使用 yield 的语法:

  const [delayAction]: [CallEffect, TakeEffect] = yield race<CallEffect | TakeEffect>([
    delay(logoutTimeout),
    take(authActions.AUTH_LOGOUT)
  ]);

  if(delayAction){
    yield put(authActions.logout());
  }

推荐阅读