【问题标题】:Array not iterable when returned by an async function in JavaScriptJavaScript 中的异步函数返回时数组不可迭代
【发布时间】:2021-05-20 23:01:13
【问题描述】:

我在一个项目中使用 vuex。在商店中,我创建了一个函数,该函数以 API 形式返回来自 id 数组的所有用户的信息。像这样:

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))

当我尝试控制台记录数组的长度时,它返回 undefined 或 0,当我使用 .sort() 或 .map() 等函数时,它也不会执行。

【问题讨论】:

    标签: javascript arrays api asynchronous async-await


    【解决方案1】:

    异步等待在 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 
    }
    
    

    【讨论】:

    • 在此处显示for of 似乎更好,并使代码更接近原始代码。还有一些关于为什么。
    猜你喜欢
    • 2023-04-04
    • 1970-01-01
    • 2011-03-04
    • 2014-06-23
    • 2019-10-23
    • 1970-01-01
    • 2021-04-21
    • 2013-09-04
    • 2018-04-06
    相关资源
    最近更新 更多