价值迟到了吗? “下面的值是刚刚评估的”

时间:2018-08-24 15:15:09

标签: javascript asynchronous axios

let currComp = this;
let projects = []
let dataArr = []    


async function getData() {
  let getProject =
    await axios.get('url', {
      auth: {
        username: 'username',
        password: 'pw'
      }
    })

  let projects = await getProject.data.value;
  let arr = []
  let KPIs = []

  projects.map(project => {
    let item = () => axios.get(`url`, {
      auth: {
        username: 'username',
        password: 'pw'
      }
    })

    arr.push(item)
    console.log('arr', arr)
  })

  let results = await axios.all(arr)

  results.map(result => {

    result().then(function(v) {
      KPIs.push(v.data.value)
    })
  })

}

getData();

我想做的是:

  1. 获取axios调用以获取项目的名称。

  2. 使用这些获取的名称来调用多个axios调用。这应该可以为我提供该项目的一些数据。

  3. results = await axios.all(arr)包含的函数可为我提供对API调用的响应。

  4. 响应被推送到数组KPIs中。

  5. 当我最后尝试console.log('KPIs', KPIs)时,它会给我

enter image description here

这似乎是一个空数组,但是当我打开它时,

enter image description here

它实际上具有我想要的值。

问题是,当我尝试在代码中使用此数组时,它只给我数组的第一项。

我试图在线搜索此问题,但它只告诉我该值到来较晚。

我想将完整的数组与完整的结果一起使用。

我该如何解决?

1 个答案:

答案 0 :(得分:1)

  

results = await axios.all(arr)包含一些函数,这些函数可以使我对API调用做出响应。

是的,但这毫无意义。您不需要返回响应的诺言的函数,也没有必要在函数数组上调用axios.all或等待它。

您将需要构建一个承诺数组,以及all()await 那个

您也不需要使用then。您可以大大简化代码:

async function getData() {
  const getProject = await axios.get('url', {
    auth: {
      username: 'username',
      password: 'pw'
    }
  });

  const projects = getProject.data.value;
  const promises = projects.map(project =>
    axios.get(`url`, {
      auth: {
        username: 'username',
        password: 'pw'
      }
    })
  );

  const results = await axios.all(promises)

  const KPIs = results.map(v => v.data.value);
}