vue.js axios获取/发布请求时加载栏

iszxjhcz  于 2023-02-24  发布在  Vue.js
关注(0)|答案(2)|浏览(215)

我试图使用Vue ProgressBar在我的项目上制作一个加载栏,它在我的路线上工作,当Axios获取或发布请求时不工作。
这是我的项目代码,当我启动加载栏,

<script>
    import Swal from 'sweetalert2';
    import Editor from '@tinymce/tinymce-vue';
    export default {
        components: {
            'editor': Editor
        },
        title() {
            return 'Stock group data';
        },
        data() {
            return {
                stockgroup: {},
                user: {},
            }
        },
        created() {
            this.$Progress.start();
            this.loadDataWarehouse();
            this.loadUser();
            this.$Progress.finish();
        },
        methods: {
            async loadDataWarehouse() {
                const response = await axios.get('/api/stock-group/' + this.$route.params.id);
                this.stockgroup = response.data;
            },
            async loadUser() {
                const resp = await axios.get('/api/contact-list');
                this.user = resp.data;
            },
        },
    }

</script>

this.$Progress.start()行是执行加载条的地方。
但是在我这样做之前,我已经阅读了文档,我们必须在默认的Vue应用程序上添加代码。
所以我把这段代码添加到我的App.vue


但是当我运行它并请求获取数据时,我不知道为什么它没有显示加载条。你可以在这里看到它。

有人能帮我吗?求你了...

46scxncf

46scxncf1#

如果你想在每个请求上显示进度条而不需要重复开始和结束代码.你可以尝试使用axios interceptor

this.axios.interceptors.request.use((config) => {
    this.$Progress.start();
    return config;
});
this.axios.interceptors.response.use(
    (response) => {
        this.$Progress.finish();
        return Promise.resolve(response);
    },
    (error) => {
        this.$Progress.finish();
        return Promise.reject(error);
    },
);
kninwzqo

kninwzqo2#

您正在查看正在调用的async函数!
实际上,你所做的是,在调用两个async函数后,显示进度条并隐藏它。
你有两个选择。
1.将hook设置为异步,将await设置为内部。

created: async () => {
 this.$Progress.start();
 // wait for the async to finish
 await this.loadDataWarehouse();
 await this.loadUser();
 // then hide the progress bar
 this.$Progress.finish();
},


1.将两者都推入promises数组并等待--这在可读性方面没有那么优雅,但在性能方面可能会更好,因为它不像选项1那样等待第一个承诺返回执行第二个承诺。

created: () => {
 // promises array
 let promises = [];
 // this context
 const self = this;
 this.$Progress.start();
 // push into the array
 promises.push(this.loadDataWarehouse());
 promises.push(this.loadUser());
 // then hide the progress bar
 Promise.all(promises).then(()=>{
   self.$Progress.finish();
 })
},

相关问题