Javascript 在redux中实现两个操作之间的回调
我对react是新手,我正在将我的web应用程序从angular改造为react。我被困在这一点上了。我的应用程序需要一个令牌来执行API调用。当某个令牌在某个特定API调用上过期时,我会观察失败情况并运行刷新令牌调用,当刷新令牌调用成功时,我会重新运行该特定API。在angular中实现很简单,但在react redux中我就是搞不懂 这是我的角度代码Javascript 在redux中实现两个操作之间的回调,javascript,callback,redux,react-redux,reducers,Javascript,Callback,Redux,React Redux,Reducers,我对react是新手,我正在将我的web应用程序从angular改造为react。我被困在这一点上了。我的应用程序需要一个令牌来执行API调用。当某个令牌在某个特定API调用上过期时,我会观察失败情况并运行刷新令牌调用,当刷新令牌调用成功时,我会重新运行该特定API。在angular中实现很简单,但在react redux中我就是搞不懂 这是我的角度代码 var fetchAccessToken = function(successCallback,failureCallback){ i
var fetchAccessToken = function(successCallback,failureCallback){
if($cookies.get('aid')){
accountGetATAPI.save({
a_id : $cookies.get('aid'),
d_id : window.fingerprint.md5hash,
at : getAt(),
cl : "W",
rt : getRefreshToken(),
k_ey : getSecret()
},function (res) {
var at = res.data.at;
//console.log("server received token: " + at);
$cookies.put('at',res.data.at);
successCallback(res);
},function (res) {
failureCallback(res);
});
}
};
var fetchProfiles = function(successCallback,failureCallback,currentTry,maxTry) {
var aid = data["Account"]["_id"];
accountProfileFetchAPI.save({
a_id : getAccountId(),
tokn : getAt()
},function(res){
data["Profiles"] = res["data"]["Profile"];
//200
successCallback(res);
},function(res){
//not 200
if(res.status == error_constants.TOKEN_EXPIRE_CODE) {
fetchAccessToken(function(){
if(currentTry < maxTry) {
fetchProfiles(successCallback, failureCallback, ++currentTry, maxTry);
} else {
console.log("maximum tries exceeded");
}
},function(res){
if(res.status == (error_constants.TOKEN_EXPIRE_CODE || error_constants.TOKEN_ERROR_CODE)){
failureCallback(error_constants.LOGOUT_USER,res);
}
});
} else {
failureCallback(null,res);
}
});
};
var fetchAccessToken=函数(successCallback,failureCallback){
如果($cookies.get('aid')){
accountGetATAPI.save({
a_id:$cookies.get('aid'),
d_id:window.fingerprint.md5hash,
at:getAt(),
cl:“W”,
rt:getRefreshToken(),
k_ey:getSecret()
},功能(res){
var at=res.data.at;
//log(“服务器接收到令牌:+at”);
$cookies.put('at',res.data.at);
成功回调(res);
},功能(res){
故障回调(res);
});
}
};
var fetchProfiles=函数(successCallback、failureCallback、currentTry、maxTry){
var aid=数据[“账户”][“账户id”];
accountProfileFetchAPI.save({
a_id:getAccountId(),
tokn:getAt()
},功能(res){
数据[“配置文件”]=res[“数据”][“配置文件”];
//200
成功回调(res);
},功能(res){
//不是200
if(res.status==error\u constants.TOKEN\u EXPIRE\u CODE){
fetchAccessToken(函数(){
如果(currentTry
我正在尝试在react代码中执行类似的操作。到现在为止,我只到了这里。我知道密码是垃圾。但我还是在想
export function fetchProfiles(currentTry,maxTry) {
return function(dispatch) {
axios.post("/profile/find",{
a_id : cookies.load("aid"),
tokn : cookies.load("at")
}).then((response) => {
console.log(response);
dispatch({type: "FETCH_PROFILES_FULFILLED", payload: response.data.data})
})
.catch((err) => {
console.log(err)
if(err.response.status == 498){
fetchAccessToken((res) =>{
if(currentTry < maxTry) {
console.log("at successcall ",currentTry,maxTry);
fetchProfiles(++currentTry, maxTry);
} else {
console.log("maximum tries exceeded");
}
console.log(res);
},(err) =>{
console.log(err);
});
return;
}
dispatch({type: "FETCH_PROFILES_REJECTED", payload: err})
})
}
}
export function fetchAccessToken(successCallback,failureCallback){
axios.post("/account/g_at_w",{
a_id : cookies.load('aid'),
d_id : window.fingerprint.md5hash,
at : cookies.load('at'),
cl : "W",
rt : cookies.load('rt'),
k_ey : cookies.load('secret')
}).then((response) => {
console.log(response);
successCallback(response);
// dispatch({type: "FETCH_PROFILES_FULFILLED", payload: response.data.data})
})
.catch((err) => {
console.log(err.response);
failureCallback(err);
// dispatch({type: "FETCH_PROFILES_REJECTED", payload: err})
})
}
导出函数fetchProfiles(currentTry、maxTry){
返回功能(调度){
axios.post(“/profile/find”{
a_id:cookies.load(“aid”),
tokn:cookies.load(“at”)
})。然后((响应)=>{
控制台日志(响应);
分派({type:“FETCH_PROFILES_completed”,有效负载:response.data.data})
})
.catch((错误)=>{
console.log(错误)
如果(err.response.status==498){
fetchAccessToken((res)=>{
如果(currentTry{
控制台日志(err);
});
返回;
}
分派({type:“FETCH\u PROFILES\u REJECTED”,负载:err})
})
}
}
导出函数fetchAccessToken(successCallback、failureCallback){
axios.post(“/account/g_at_w”{
a_id:cookies.load('aid'),
d_id:window.fingerprint.md5hash,
at:cookies.load('at'),
cl:“W”,
rt:cookies.load('rt'),
k_ey:cookies.load('secret')
})。然后((响应)=>{
控制台日志(响应);
成功回调(应答);
//分派({type:“FETCH_PROFILES_completed”,有效负载:response.data.data})
})
.catch((错误)=>{
控制台日志(错误响应);
故障回调(err);
//分派({type:“FETCH\u PROFILES\u REJECTED”,负载:err})
})
}
我使用redux thunk和axios执行api调用。非常感谢您的帮助。请告诉我们您的方法面临的问题?如果返回函数(dispatch){}内成功,我无法调用fetchProfiles()。fetchProfiles()被忽略。控制台中有错误吗?关于
fetchProfiles
No!什么都没有,只是被忽略了。试试dispatch(fetchProfiles(++currentTry,maxTry))
。也许我对你的执行有些怀疑。