node.js - 定义异步函数时的 async/await Node v9 "unexpected token function"

标签 node.js mongoose promise async-await

我想在我的应用程序中使用 async/await,主要是为了查询我的数据库

我有这个功能:

async function getVariables() {

    var id = await Service.getIdByName('JollyClick')

    console.log(id)

}

应该称之为:

serviceSchema.statics.getIdByName = async function getIdByName (serviceName) {

    this.findOne({name :serviceName }).exec().then(function(service){
        return service._id
    })
}

但我收到错误:

async function getVariables() {
      ^^^^^^^^

SyntaxError: Unexpected token function

我正在使用 Node v9

请帮忙!

最佳答案

我认为您不需要 getIdByName 函数上的异步,例如

serviceSchema.statics.getIdByName = function getIdByName (serviceName) {

    this.findOne({name :serviceName }).exec().then(function(service){
        return service._id
    })
}

没问题。

不过,我认为这不是您错误的根源。你的代码看起来没问题,它在 Node 8.9.4 上为我运行,你的 IDE 会做一些烦人的事情吗?我见过 WebStorm 在您没有选择正确的 JavaScript 版本时执行此操作。

当然,当您使用await 调用函数时,您通常是使用返回promise 的函数来执行此操作。

所以我也会像这样更改 getIdByName:

serviceSchema.statics.getIdByName = function getIdByName (serviceName) {

    return this.findOne({name :serviceName }).exec().then(function(service){
       return service._id;
    })
}

这使 promise 链保持完整。

语法:

异步函数 getVariables() {

无论如何都是正确的。

如果您的 IDE 针对旧版本的 JavaScript,它可能不允许您使用 async 关键字。

尝试这个 fiddle 来查看正在使用的 async 关键字:

https://jsfiddle.net/u453mdkb/3/

关于node.js - 定义异步函数时的 async/await Node v9 "unexpected token function",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49180893/

相关文章:

javascript - Deftjs promise 完成()不工作

javascript - 我可以出于开发目的运行本地版本的 firebase 数据库吗?

javascript - Mongodb $graphLookup 构建层次结构

javascript - Mongoose find 和 findOne 返回整个集合

node.js - 如何只显示最新的文档?

javascript - 当从 Angular 工厂调用时,API $http delete 返回 405

javascript - JS 中的 Promise 循环

javascript - 在 Node.js 中设置 cookie 值

angularjs - 哪里转义html?

javascript - 查找所有文档,但如果某些文档具有相同的值,则获取最新的文档