我正在构建一个"检查用户是否经过身份验证,如果是,请每2分钟更新一次会话"函数,并希望将其用作需要身份验证的react-router(v2.8.1)路由中的onEnter挂钩。
const requireAuth = (store, nextState, replace) => {
const redirectToLogin = (state, cb) => cb({
pathname: '/login',
state: { nextPathname: state.location.pathname }
});
if (getToken() === null) {
redirectToLogin(nextState, replace);
} else {
const authInterval = setInterval(
store.dispatch(refreshSession()).catch(() => redirectToLogin(nextState, replace))
, 120000);
store.dispatch(setRefreshSessionTimer(authInterval));
}
};
我在.bind(this, store)
的路线中使用此功能(这对我来说似乎有些不确定,但是有效)。
<Route
path='/protected'
onEnter={requireAuth.bind(this, store)}
/>
我还有onLeave定义的clearAuthInterval,但当前的问题是,当从setInterval内部调用dispatch(refreshSession().catch())
时,我从chrome中得到Uncaught SyntaxError: Unexpected identifier
(错误源是{{1当我打开它时,我看到VM{someNumbers}:1
。
我使用[object Promise]
中间件,我的操作确实返回了一个承诺,但我似乎无法以某种方式捕获错误,并重定向redux-thunk
操作中的错误。< / p>
编辑:setInterval需要一个函数来调用。所以refreshSession
的工作原理与我原先预期的一样。
答案 0 :(得分:0)
setInterval需要一个函数来调用。
const authInterval = setInterval(() =>
store.dispatch(refreshSession()).catch(() => redirectToLogin(nextState, replace))
, 120000);
这是我期望的方式。