在JavaScript中由异步函数返回时数组不可iterable
我正在一个项目中使用vuex。在商店里,我做了一个函数,从一个ID数组返回所有用户的信息,形成一个API。大概是这样的:在JavaScript中由异步函数返回时数组不可iterable,javascript,arrays,api,asynchronous,async-await,Javascript,Arrays,Api,Asynchronous,Async Await,我正在一个项目中使用vuex。在商店里,我做了一个函数,从一个ID数组返回所有用户的信息,形成一个API。大概是这样的: async function getUsersdata(userIds){ let userData = new Array() userIds.forEach(async (id) => { const url = baseUrl + id + '/' const data = await getUserDetails(url) use
async function getUsersdata(userIds){
let userData = new Array()
userIds.forEach(async (id) => {
const url = baseUrl + id + '/'
const data = await getUserDetails(url)
userData.push(data)
})
return userData
}
稍后我使用这个函数,当我尝试对数组执行foreach时,该函数返回forech不起作用。但如果控制台记录整个阵列,则阵列显示正确
let Users = await getUsersdata(idArray)
console.log(await Users)
Users.forEach(User => console.log(User.name))
另外,当我尝试控制台记录数组长度时,它返回未定义或0,当我使用.sort()或.map()等函数时,它也不会执行。异步等待在
forEach
内部不起作用,因此您应该使用for
迭代器
async function getUsersdata(userIds){
let userData = new Array()
for(var i=0; i<userIds.length; i++) {
const id = userIds[i]
const url = baseUrl + id + '/'
const data = await getUserDetails(url)
userData.push(data)
}
return userData
}
异步函数getUsersdata(userid){
让userData=newarray()
对于(var i=0;iShowing
for of
,这里似乎更优越,并使代码更接近原始代码。还有一些原因。