我在react.js中編寫SPA,我使用的是redux-api來處理後端連接。我想在執行主要操作之前執行同步操作以刷新身份驗證令牌;這樣,每次我會對後端做一個動作,我都會確定這個令牌是有效的。預取塊內的redux-api同步操作
const endpoints = {
{
url: '/some/url',
crud:true,
prefetch:[
({actions, dispatch, getState}, cb) =>{
actions.auth_token.post(JSON.stringify({
token: "my token",
refreshToken: "my_refresh_token"
}),null, (err, data) =>{
if(err){
// HANDLE ERROR
}
setToken(data)
})
}
]
}
}
const api = reduxApi(endpoints)
如何以同步方式調用預取功能?所以首先令牌刷新然後是Action?
編輯 我們可以做的東西異步,重要的是CB(最後通話),這裏是例子
const endpoints = {
{
url: '/some/url',
crud:true,
prefetch:[
({actions, dispatch, getState}, cb) =>{
let mills = new Date().getTime()
const { token, generationTime, accessTokenLife, refreshTokenLife, refreshToken } = localStorage
// Conditions: exixts token, it is expired, refresh token is not expired
if(token && generationTime + accessTokenLife - 500 < mills && generationTime + refreshTokenLife - 500 > mills){
dispatch(actions.token_refresh.get(null, null, (err, data) =>{
if(err){
dispatch(setError(err))
}else{
refreshTokenData(data)
}
cb()
}))
}else{
cb()
}
}
]}}
const api = reduxApi(endpoints)
嗨!感謝你的回答。 在這個例子中,我想讓SSCCE指出問題,在開發環境中,我得到令牌並在它到期之前刷新它。在任何情況下,我找到了解決方案:我可以使用異步操作,如果成功或錯誤,我必須調用cb()函數。而已! –