[英]javascript await function in script returns Uncaught SyntaxError: await is only valid in async functions and the top level bodies of modules
[英]Javascript: SyntaxError: await is only valid in async function
我在Sequelize.js的 Node 8上
尝试使用await
时发出以下错误。
SyntaxError: await is only valid in async function
码:
async function addEvent(req, callback) {
var db = req.app.get('db');
var event = req.body.event
db.App.findOne({
where: {
owner_id: req.user_id,
}
}).then((app) => {
let promise = new Promise((resolve, reject) => {
setTimeout(() => resolve("done!"), 6000)
})
// I get an error at this point
let result = await promise;
// let result = await promise;
// ^^^^^
// SyntaxError: await is only valid in async function
}
})
}
收到以下错误:
let result = await promise;
^^^^^
SyntaxError: await is only valid in async function
我究竟做错了什么?
您只能在异步函数下运行await语句。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function
所以,你可以写你的
}).then((app) => {
如
}).then(async (app) => {
async/await
仅在立即函数具有async关键字时才有效,您需要:
...
}).then(async app => { // <<<< here
let promise = new Promise((resolve, reject) => {
setTimeout(() => resolve("done!"), 6000)
})
// I get an error at this point
let result = await promise;
// let result = await promise;
// ^^^^^
// SyntaxError: await is only valid in async function
}
})
addEvent
是async..await
和raw promises的混合体。 await
是then
语法糖。 这是一个或另一个。 混合物导致不正确的控制流量; db.App.findOne(...).then(...)
promise未链接或返回,因此无法从外部addEvent
。
它应该是:
async function addEvent(req, callback) {
var db = req.app.get('db');
var event = req.body.event
const app = await db.App.findOne({
where: {
owner_id: req.user_id,
}
});
let promise = new Promise((resolve, reject) => {
setTimeout(() => resolve("done!"), 6000)
})
let result = await promise;
}
通常,普通回调不应与承诺混在一起。 callback
参数表示使用addEvent
API也可能需要被保护。
您只能在异步函数内使用await。 您还可以等待一段返回promise的代码。
在这里,您在不同的上下文中使用await。 你最好用then()来解决这个问题。
await只有在包含它的立即函数是异步的情况下才有效。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.