async / await node v9"意外的令牌功能"在定义异步函数时

时间:2018-03-08 19:20:38

标签: 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

请帮忙!

1 个答案:

答案 0 :(得分:1)

我认为你不需要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;
    })
}

这使得承诺链保持完整。

语法:

异步函数getVariables(){

无论如何都是正确的。

如果您的IDE定位的是较旧版本的JavaScript,则可能不允许您使用async关键字。

尝试这个小提示以查看正在使用的async关键字:

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