更新認証トークンを実装するシナリオがあります。このシナリオでは、各種類のアクション (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」を使用できません。「約束」または「その後」の使用に関する解決策はありますか?アクションが完了した後、コンポーネントでいくつかのメッセージをレンダリングする必要があります。