【问题标题】:Value arriving late? “Value below was evaluated just now”价值迟到? “下面的值刚刚被评估”
【发布时间】:2019-01-31 02:34:01
【问题描述】:
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)时,它给了我

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

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

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

我试图在网上搜索这个问题,它只告诉我值迟到了。

我想使用带有完整结果的完整数组。

我该如何解决?

【问题讨论】:

  • 你为什么要创建这个函数数组?

标签: javascript asynchronous axios


【解决方案1】:

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

是的,但这没有意义。您不希望函数返回响应的承诺,并且在函数数组上调用 axios.all 或等待它是没有用的。

您将需要构建一个 promise 数组,以及 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);
}

【讨论】:

  • 它似乎正在工作!一件事是,当我进行第二次 axios 调用时,有一些 API 无法工作,因为该项目中不存在数据。这是故意的。但我希望它在它不存在时跳过它,只从存在的那个中调用它。我该怎么做?
  • 您可以过滤projects(通话前)或results
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-08
相关资源
最近更新 更多