H5W3
当前位置:H5W3 > 其他技术问题 > 正文

axios中没有promise的finally和done方法,如何实现?

在开发的过程中遇到了一些问题,每次的异步请求,在处理loading状态的时候,在最后需要改变状态,axios中没有提供promise的finally和done方法,所以每次loading状态的改变需要在then和catch中改变两次,现在把catch统一封装处理了,但是loading状态就没有办法改变了,最好有finally方法能一次就处理了。各位有没有好的实现方法。

回答:

谢那个谁的邀.
在 axios 中做loading, 我目前的做法是放在请求和响应拦截器里.

clipboard.png

axios.interceptors.request.use(function (config) {
    //Toast.loading({mask: true})
    //可以多一点配置, 不想要loading的接口可以在config加一个参数
    //调接口的时候可以 this.$http.get("path", {params: {}, hideLoading: true})
    !config.hideLoading && Toast.loading({mask: true})
    if (config.method === 'post' || config.method === 'put') {
        config.data = qs.stringify(config.data);
    }
    return config;
});


instance.interceptors.response.use(function (res) {
    Toast.clear();
    return res;
}, function (error) {
    Toast.clear();
    return Promise.reject(error);
})

这样你就不需要每个请求都加loading. 这样写, 只要请求了, 就会有loading.

回答:

在它的外层再封装一个对象就可以,我做过

切实可行的扩展有:
阻挡重复请求
阻挡频繁请求
延迟请求
打断请求
finally
相应的exception类
和原来一样的链式操作。

不过。。。具体代码我不知道丢哪去了

回答:

所有请求都加个loading的做法太逗了, 正确的做法是给promise补一个finally 方法啊

回答:

.then().finally(()=>{
loading = false
})

本文地址:H5W3 » axios中没有promise的finally和done方法,如何实现?

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址