下面是我要运行的代码:
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/