Ich bin ein SPA in react.js codieren und ich verwende Redux-API Backend-Verbindung zu behandeln. Ich möchte eine Synchronisierungsaktion ausführen, um das Authentifizierungs-Token zu aktualisieren, bevor die Hauptaktion ausgeführt wird. Auf diese Weise werde ich jedes Mal, wenn ich eine Aktion für das Backend mache, sicher sein, dass das Token gültig ist.redux-api Synchronisierung Aktion in einem Prefetch-Block
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)
Wie kann ich die Vorabruffunktion auf synchrone Weise aufrufen? Also zuerst das Token aktualisiert und dann die Aktion?
EDIT Wir haben das Zeug async tun können, die wichtig ist der letzte Aufruf an cb(), hier ist das Beispiel
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)
Hallo! Danke für die Antwort. Mit diesem Beispiel wollte ich ein SSCCE machen, um auf das Problem hinzuweisen, in der Entwicklungsumgebung erhalte ich das Token und aktualisiere es, bevor es abläuft. In jedem Fall fand ich die Lösung: Ich kann eine asynchrone Operation verwenden und bei Erfolg oder Fehler muss ich die cb() Funktion aufrufen. Das ist es! –