Javascript:SyntaxError:await 仅在异步函数中有效

新手上路,请多包涵

我在 Node 8 上使用 Sequelize.js

尝试使用 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

我究竟做错了什么?

原文由 user1107173 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 691
2 个回答

addEventasync..await 和原始承诺的混合体。 awaitthen 的语法糖。这是一个或另一个。混合导致不正确的控制流; 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 也可能需要被承诺。

原文由 Estus Flask 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题