Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Axios不执行并发请求_Javascript_Axios_Quasar Framework - Fatal编程技术网

Javascript Axios不执行并发请求

Javascript Axios不执行并发请求,javascript,axios,quasar-framework,Javascript,Axios,Quasar Framework,我想通过Vuex操作向我的后端发出一些请求。最好是这些请求可以并行执行,因为它们获取的数据不依赖于其他请求 为了确保我的请求不会立即返回,我向每个api地址添加了3秒延迟(服务器端),以模拟长时间运行的操作 我面临的问题是,请求是按顺序完成的,我不太知道如何修复它。对于两个请求,控制台中的“启动”和“完成”消息之间总是有6秒的延迟,而不是~3秒 我对web开发不是很有经验,所以我的一些假设可能不正确,但我已经偶然发现了从Vuex actions返回axios方法的要求,这也是我所做的 这是我的页

我想通过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];