Javascript 从拦截器重复请求后,Axios结果未定义

Javascript 从拦截器重复请求后,Axios结果未定义,javascript,axios,Javascript,Axios,我正在尝试实现一个拦截器,它刷新过期的令牌并重试最新的请求。它在大多数情况下都有效,但当重试原始请求时,res未定义 这是我最初的要求 this.$http.post('/auth/verify') .then((res) => { this.$store.commit('login', res.data); }) .catch((e) => { c

我正在尝试实现一个拦截器,它刷新过期的令牌并重试最新的请求。它在大多数情况下都有效,但当重试原始请求时,
res
未定义

这是我最初的要求

this.$http.post('/auth/verify')
            .then((res) => {
                this.$store.commit('login', res.data);
            })
            .catch((e) => {
                console.error(`Error during verify: ${e}`);
            });
这就是我使用的拦截器

axios.interceptors.response.use(null, (err) => {
if (err.response && err.response.status === 401 && err.response.data.message.includes('jwt expired')) {
    const { refreshToken } = JSON.parse(localStorage.getItem('auth'));
    axios.post('/auth/refresh', { refreshToken })
        .then((res) => {
            axios.defaults.headers.common.Authorization = `Bearer ${res.data.token}`;
            err.config.headers.Authorization = `Bearer ${res.data.token}`;
            localStorage.setItem('auth', JSON.stringify({
                refreshToken,
                token: res.data.token,
            }));

            return axios(err.config);
        })
        .catch((e) => {
            console.error(`Error refreshing token: ${e}`);
        });
    } else {
       return Promise.reject(err);
    }
});

正如我所说的,
res
在拦截器重试请求后未定义,但是在chrome devtools网络选项卡中,
/auth/verify
的第二个请求通过并返回正确的响应,这意味着第二个验证请求成功。

我通过使拦截器返回如果逻辑正确,那么您只需添加
return
axios.post('/auth/refresh',{refreshttoken}),即可解析
axios(err.config)

。请务必让我知道这是否有效。遗憾的是,这不起作用。然而,我通过让拦截器返回一个承诺并解析
axios(err.config)
ok.使它工作起来。。是的,这是我的下一个答案。很高兴你找到了