reactjs - 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*() {...}
) - 但没有得到任何安慰。
怎么了?
解决方案
您应该使用其他不使用 yield 的语法:
const [delayAction]: [CallEffect, TakeEffect] = yield race<CallEffect | TakeEffect>([
delay(logoutTimeout),
take(authActions.AUTH_LOGOUT)
]);
if(delayAction){
yield put(authActions.logout());
}
推荐阅读
- c++ - 退出 C++ 中的递归 void 方法
- javascript - Google Script CSV 保存下标字符
- vue.js - 如何使计算返回总和而不是字符串连接?
- azureservicebus - 服务端点 IP 过滤和 vnet 规则
- php - Symfony 4 - 自动装配不起作用
- c# - AutoMapper 根据嵌套值重新映射对象
- docker - OpenWhisk 支持自定义注册表
- firebase - 在 AngularDart 应用中集成 Firebase 身份验证
- c# - 如何在 xaml 实现中隐藏 wpf 控件的属性?
- cucumber - 使用守夜人 1.0.6