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();
我想做的是:
获取axios调用以获取项目的名称。
使用这些获取的名称来调用多个axios调用。这应该可以为我提供该项目的一些数据。
results = await axios.all(arr)
包含的函数可为我提供对API调用的响应。
响应被推送到数组KPIs
中。
当我最后尝试console.log('KPIs', KPIs)
时,它会给我
这似乎是一个空数组,但是当我打开它时,
它实际上具有我想要的值。
问题是,当我尝试在代码中使用此数组时,它只给我数组的第一项。
我试图在线搜索此问题,但它只告诉我该值到来较晚。
我想将完整的数组与完整的结果一起使用。
我该如何解决?
答案 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);
}