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

发布于 2022-09-04 21:57:10 字数 192 浏览 8 评论 0

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

于我来说 2022-09-11 21:57:10

谢那个谁的邀.
在 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.

猫九 2022-09-11 21:57:10

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

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

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

涙—继续流 2022-09-11 21:57:10

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

清旖 2022-09-11 21:57:10

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文