async function getData() {
let getProject =
await axios.get('url', {
auth: {
username: 'username',
password: 'pw'
}
})
let projects = await getProject.data.value;
let arr = []
projects.map(project => {
let item = axios.get(`url`, {
auth: {
username: 'username',
password: 'pw'
}
})
arr.push(item)
console.log('arr', arr)
})
let result = await axios.all(arr)
console.log('pr', result)
return arr;
}
在getProject
中,我通过调用API获得项目的对象。然后,我尝试遍历这些获取的对象,并对每个项目使用唯一的URL来调用projects.map
中的另一个API。
console.log('arr', arr)
给了我一系列的Promises,其中有些是失败的请求,有些是成功的。这是因为某些项目可能没有有效的API。但是我想要一个成功的Promises数组。
这甚至没有到达console.log('pr' result)
行,我不确定为什么。
我做对了吗?
答案 0 :(得分:1)
尝试修改代码,以使arr
是返回axio请求诺言的函数数组(而不是arr
是实际的axios请求诺言数组,如您当前所做的那样):< / p>
let projects = await getProject.data.value;
// Map all project items to functions that return promises
let arr = projects.map(project => {
// Return a function that returns a promise
return function() {
// Returns a promise for GET request
return axios.get(`url`, {
auth: {
username: 'username',
password: 'pw'
}
})
}
})
// Axios.all will concurrently perform all GET requests
// in arr (ie the mapping of projects to functions that
// return promises from axios.get )
let result = await axios.all(arr)
// Should print results from axio.get (if all requests successful)
console.log('pr', result)
这有点像axios.all
这样的方法通常起作用的方式,并且类似于本机Promise.all
方法。有关更多信息,请参见“ axios API” in the axios docs