Reactjs中的递归操作调用

Reactjs中的递归操作调用,reactjs,redux,refresh-token,redux-promise,Reactjs,Redux,Refresh Token,Redux Promise,我有一个实现刷新身份验证令牌的场景。在这个场景中,我为每种操作(Post、Get、Delete)实现了一个通用操作,并使用参数调用它们 export function Get(param) { return function (dispatch) { var query = param ? !!param.Query ? param.Query : "" : ""; var funtionName = param ? param.FunctionName : ""; va

我有一个实现刷新身份验证令牌的场景。在这个场景中,我为每种操作(Post、Get、Delete)实现了一个通用操作,并使用参数调用它们

export function Get(param) {
return function (dispatch) {
    var query = param ? !!param.Query ? param.Query : "" : "";
    var funtionName = param ? param.FunctionName : "";
    var url = endPointUrl + funtionName;
    var offset = param.Offset ? param.Offset : "0";
    var limit = param.Limit ? param.Limit : "10";
    const config = { headers: { 'Authorization': 'Bearer ' + sessionStorage.getItem('access-token') } };
    return new Promise((resolve, reject) => {
        axios.get(url, config).then((response) => {
            dispatch({ type: 'FETCH_SUCCEED_' + param.Caller, payload: response.data })
            resolve(response.data);
        }).catch((error) => {
                if (error.request.status == "401" && error.request.statusText == "RB.Exception.TokenExpiredException") {
                    refreshToken().then(() => {
                        dispatch(Get(param));
                    });
                }
            else {
                dispatch({ type: 'FETCH_ERROR_' + param.Caller, payload: error })
                reject(error);
            }

        })
    })
}
每当收到TokenExpiredException时,我都会调用refreshToken(),然后再次(递归地)调用当前操作,因此我不能在组件中使用“then”。 关于使用“承诺”或“然后”,你有什么解决办法吗? 操作完成后,我需要在组件中呈现一些消息

像这样的

export function Get(param) {
    return function (dispatch) {
        var query = param ? !!param.Query ? param.Query : "" : "";
        var funtionName = param ? param.FunctionName : "";
        var url = endPointUrl + funtionName;
        var offset = param.Offset ? param.Offset : "0";
        var limit = param.Limit ? param.Limit : "10";
        const config = { headers: { 'Authorization': 'Bearer ' + sessionStorage.getItem('access-token') } };
        return new Promise((resolve, reject) => {
            axios.get(url, config).then((response) => {
                dispatch({ type: 'FETCH_SUCCEED_' + param.Caller, payload: response.data })
                resolve(response.data);
            }).catch((error) => {
                if (error.request.status == "401" && error.request.statusText == "RB.Exception.TokenExpiredException") {
                    resolve(withRefresh(dispatch, param));
                }
                else {
                    dispatch({ type: 'FETCH_ERROR_' + param.Caller, payload: error })
                    reject(error);
                }

            })
        })
    }
}

function withRefresh(dispatch, param) {
    return refreshToken().then(() => {
        return dispatch(Get(param));
    });
}

您必须返回您的第二个承诺,即
返回分派(Get(param))
请尝试以下代码

导出函数Get(param){
返回功能(调度){
var query=param?!!param.query?param.query::“”;
var FunctionName=param?param.FunctionName:“”;
var url=endPointUrl+funtionName;
变量偏移=参数偏移?参数偏移:“0”;
var limit=参数限制?参数限制:“10”;
const config={headers:{'Authorization':'Bearer'+sessionStorage.getItem('access-token')};
返回新承诺((解决、拒绝)=>{
get(url,config).then((响应)=>{
分派({type:'FETCH_successful_'+param.Caller,payload:response.data})
解析(response.data);
}).catch((错误)=>{
if(error.request.status==“401”&&error.request.statusText==“RB.Exception.TokenExpiredException”){
refreshToken()。然后(()=>{
返回调度(Get(param));
});
}
否则{
分派({type:'FETCH\u ERROR\uu'+param.Caller,负载:ERROR})
拒绝(错误);
}
})
})

}
谢谢,我尝试了你的解决方案,但没有成功,正如辛里奇所说,我们必须称之为“解决”