一段时间后在saga函数中如何调用动作?

问题描述

一段时间后,我尝试了许多解决方案来执行操作,但是似乎没有任何效果

export default function* authenticateUserRequest({ payload }) {
  yield put(setIsLogging(true));
  try {
    const { login,password,company,isSaved } = payload;

    const client = yield call(geoRedClient);
    const { data } = yield call(client.auth,{
      login,client: company,duree_token: 28800,});

    const error = yield call(selectErrorFromresponse,data);

    if (!isNilOrEmpty(error)) {
      yield put(addError('loginError'));
      yield cancel();
    }

    const { token: authToken,...loginData } = selectCurrentUserLoginFromresponse(data);
    yield call(AsyncStorage.setItem,STORAGE_KEY.authToken,authToken);

    yield put(loginRequestSuccess(loginData));
    //wait 2 seconds
  } catch (e) {
    yield put(addError('loginError'));
  }

  yield put(setIsLogging(false));

  yield delay(30000);
  yield put(logoutRequest());
}

我想在30秒后注销,但是每次我都立即注销,您看到的是我尝试过的。

我也尝试过这个:

const delay = time => new Promise(resolve => setTimeout(resolve,time));

export default function* authenticateUserRequest({ payload }) {
  yield put(setIsLogging(true));
  try {
      // same actions as before
  } catch (e) {
    yield put(addError('loginError'));
  }

  yield put(setIsLogging(false));

  yield call(delay,2000);
  yield put(logoutRequest());
}

还有这个:

const sleep = sec => {
  return new Promise(resolve => setTimeout(resolve,sec * 1000));
};

export default function* authenticateUserRequest({ payload }) {
  yield put(setIsLogging(true));
  try {
    
    // same actions as before
    
    yield sleep(20); //wait 2 seconds
    yield put(logoutRequest());
  } catch (e) {
    yield put(addError('loginError'));
  }

  yield put(setIsLogging(false));
}

但是什么也没有,总是什么都没有!

任何帮助将不胜感激。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)