javascript - 异步/等待 for 循环 | await 只在 async 函数中有效

标签 javascript node.js ecmascript-6 es6-promise

下面是我要运行的代码:

async function verifyExistingUsers(db, users) {
    return new Promise((resolve, reject) => {

       var companies = []
       for (const [index, user] of users.entries()) {

           let company = await getUserCompany(db, user)
           companies.push(company) 

           if (index === users.length-1) {
               resolve(companies)
           }
       }
   })
}

async function getUserCompany(db, user) {
    return new Promise((resolve, reject) => {
        db.Company.findAll({
            where: {
                id: user.id,
            }
        }).then(company => {
            resolve(company)
        })
    }).catch(error => {
        reject()
    })
}

我不断收到以下错误:

let companies = await getUserCompany(db, user)
                ^^^^^
SyntaxError: await is only valid in async function

我不能使用 forEach 因为我需要 await

JavaScript 新手。我做错了什么?

最佳答案

作为我评论的后续:verifyExistingUsers 没有理由“返回新的 promise ”。 Node 会将您的 return 语句包装在自己的 promise 中,因为该函数是“异步”的。

这里最初的错误是因为您实际上不能在匿名、非异步函数 ((resolve, reject) => {}) 中使用 await

在将数据插入数组后,您将只返回所需的变量,而不是返回新的 promise 。通过这样做并将函数声明为“异步”,Node 会将您的返回值包装在您在其他地方等待的 promise 中。

async function verifyExistingUsers(db, users) {
       var companies = []
       for (const [index, user] of users.entries()) {

           let company = await getUserCompany(db, user)
           companies.push(company) 

           if (index === users.length-1) {
               return companies; //effectively returns a promise that resolves to companies
           }
       }
}

关于javascript - 异步/等待 for 循环 | await 只在 async 函数中有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54837922/

相关文章:

javascript - Ramda,从数组中提取一个 json 索引

使用 JQuery Boilerplate 的 Javascript 范围问题

php - 使用 PHP 或 JS 将表单值传递到其他页面

javascript - 使用模板字符串 (ES6) 作为函数中的返回变量

javascript - iframe 父文档上的 jQuery 效果

node.js - 渲染器和主进程之间的时差

javascript - 异步函数抛出错误: socket hang up

mongodb - 如何在 Mongoose 中查询不同的值?

javascript - 错误 : UnhandledPromiseRejectionWarning: Unhandled promise rejection

JavaScript ES6 : Grouping methods in es6 classes?