代码不等待forEach完成:异步

时间:2018-11-19 13:42:51

标签: javascript node.js promise async-await

我有一个功能

transformAllUser = async (userList): Promise<any> => {
  return new Promise((resolve, reject) => {
        const userListArray = [];
        userList.forEach((user) => { 
             // do something like or something else
            userListArray.push({obj : user})
        })
     resolve(userListArray )
 })
}

并获得该值:

const val = await transformAllUser(userList);
console.log(val) // its empty.

我得到的是一个空数组,我在这里在做什么错,以便我的代码不等待forEach完成

3 个答案:

答案 0 :(得分:0)

您不必为此使用async await。如果for循环中的代码不会进行任何异步操作,则无需使用async await

像这样简单的事情应该对您有用。

const transformAllUser = (userList) => {
  const userListArray = [];
  userList.forEach((user) => {
    userListArray.push({
      obj: user
    })
  })
  return userListArray;
}

const userList = [{name: 'john'}, {name: 'doe'}];
const val = transformAllUser(userList);
console.log(val);

如果您仍然想使用async await,则需要以正确的方式使用它。 await只能存在于async函数内部。

const transformAllUser = async (userList) => {
  return new Promise((resolve, reject) => {
    const userListArray = [];
    userList.forEach((user) => {
      userListArray.push({ obj: user })
      // if you have any asyncronous actions here, say, API call or promise, you will await it
      // await makeAsyncCall()
    })
    resolve(userListArray);
  })

}

const userList = [{
  name: 'john'
}, {
  name: 'doe'
}];

transformAllUser(userList).then(val => {
  console.log(val);
});

答案 1 :(得分:0)

这是您可以使用的解决方案。

const transformAllUser = async (userList) => userList.map(user => ({obj: user}))
const users = [{name : "1"}, {name : "2"}, {name : "3"}]

(async () => {
  const transformedUsers = await transformAllUser(users)
  console.log(transformedUsers)
})()

答案 2 :(得分:-1)

plugins:{
  allure:{
    enabled:true,
  },

  uniqueScreenshotNames:true,
  retryFailedStep:{
    enabled:true,
    retries:2,
  },
},