Javascript Axios不执行并发请求
我想通过Vuex操作向我的后端发出一些请求。最好是这些请求可以并行执行,因为它们获取的数据不依赖于其他请求 为了确保我的请求不会立即返回,我向每个api地址添加了3秒延迟(服务器端),以模拟长时间运行的操作 我面临的问题是,请求是按顺序完成的,我不太知道如何修复它。对于两个请求,控制台中的“启动”和“完成”消息之间总是有6秒的延迟,而不是~3秒 我对web开发不是很有经验,所以我的一些假设可能不正确,但我已经偶然发现了从Vuex actions返回axios方法的要求,这也是我所做的 这是我的页面:Javascript Axios不执行并发请求,javascript,axios,quasar-framework,Javascript,Axios,Quasar Framework,我想通过Vuex操作向我的后端发出一些请求。最好是这些请求可以并行执行,因为它们获取的数据不依赖于其他请求 为了确保我的请求不会立即返回,我向每个api地址添加了3秒延迟(服务器端),以模拟长时间运行的操作 我面临的问题是,请求是按顺序完成的,我不太知道如何修复它。对于两个请求,控制台中的“启动”和“完成”消息之间总是有6秒的延迟,而不是~3秒 我对web开发不是很有经验,所以我的一些假设可能不正确,但我已经偶然发现了从Vuex actions返回axios方法的要求,这也是我所做的 这是我的页
<template>
<div class="q-pa-md q-gutter-sm">
<q-btn label="Fetch data" color="primary" flat class="q-ml-sm" @click="loadData()" />
</div>
</template>
<script>
export default {
methods: {
loadData() {
console.log('Started');
const commonData = [
this.$store.dispatch('currency/fetchAll'),
this.$store.dispatch('contractor/fetchAll'),
];
return Promise
.allSettled(commonData)
.then(() => {
console.log('Done!');
});
},
},
};
</script>
启动/Axios.js时的Axios曝光:
import axios from 'axios';
const axiosInstance = axios.create({
baseURL: 'http://localhost:8080/api/rest/',
});
Vue.prototype.$axios = axiosInstance;
export { axiosInstance };
即使我将调用从dispatch
更改为axios调用,如下所示:
const a = axiosInstance
.get('currencies/')
.then((response) => {
console.log('a finished');
this.commit('currency/assignNewData', response.data);
});
它仍然不会发出并发请求(我认为这可能是由于将操作分派到存储区引起的,但看起来这无关紧要)
我使用的是Quasar 2.1.6,我认为您的请求实际上是并行运行的。您可以通过在fetchAll()
操作的开头记录Date.now()
来测试这一点
“启动”和“完成”消息之间出现6秒延迟的原因是,您正在then()
调用Promise.allsolited()
中记录“完成”,这只会在承诺返回某些内容后被激发
以下是有关承诺.allsolited()
的相关信息:
一个挂起的承诺,一旦指定承诺集合中的每个承诺都完成,它将异步实现[…]
import axios from 'axios';
const axiosInstance = axios.create({
baseURL: 'http://localhost:8080/api/rest/',
});
Vue.prototype.$axios = axiosInstance;
export { axiosInstance };
const a = axiosInstance
.get('currencies/')
.then((response) => {
console.log('a finished');
this.commit('currency/assignNewData', response.data);
});
const b = axiosInstance
.get('contractors/')
.then((response) => {
console.log('b finished');
this.commit('contractor/assignNewData', response.data);
});
const commonData = [a,b];