Javascript 尝试循环axios请求并异步推送它
在Javascript 尝试循环axios请求并异步推送它,javascript,asynchronous,async-await,axios,Javascript,Asynchronous,Async Await,Axios,在getProject中,我通过调用API获取项目的对象。然后我尝试遍历这些获取的对象,并为每个项目使用唯一的url来调用projects.map中的另一个API console.log('arr',arr)提供了一系列承诺,其中一些是失败的请求,一些是成功的。这是因为某些项目可能没有有效的API。但我想要一个有成功承诺的阵列 这甚至没有到达console.log('pr'结果)行,我不知道为什么 我做得对吗?尝试修改您的代码,使arr是一个函数数组,可以为axio请求返回承诺(而不是像您当前所
getProject
中,我通过调用API获取项目的对象。然后我尝试遍历这些获取的对象,并为每个项目使用唯一的url来调用projects.map中的另一个API
console.log('arr',arr)
提供了一系列承诺,其中一些是失败的请求,一些是成功的。这是因为某些项目可能没有有效的API。但我想要一个有成功承诺的阵列
这甚至没有到达console.log('pr'结果)
行,我不知道为什么
我做得对吗?尝试修改您的代码,使
arr
是一个函数数组,可以为axio请求返回承诺(而不是像您当前所做的那样,arr
是一个实际axios请求承诺数组):
这是axios等方法的一个微妙之处。all通常工作,与本机的Promise.all方法类似。有关更多信息,请参见“axios API”上方的示例。如果您没有进入最终控制台.log,是否在日志中收到任何警告/错误?比如一个未经证实的承诺错误?确保控制台显示警告。我按照您告诉我的方式操作,
arr
包含大量f item()
而不是我想要的结果。我必须如何使用这些?我确实let result=wait axios.all(arr)
在最后,但仍然是一样的。您好,请参阅上面更新的答案-这对您有用吗?是的。很抱歉谢谢
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;
}
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)