我想在我的应用程序中使用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


我正在使用节点v9

请帮忙 !

最佳答案

我认为您不需要对getIdByName函数进行异步处理,例如

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

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


会没事的。

我认为这不是您的错误的根源。您的代码看起来还不错,否则它将在Node 8.9.4上为我运行,您的IDE可能会令人讨厌吗?当您没有选择正确的JavaScript版本时,我已经看到WebStorm会这样做。

当然,当您使用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/

关于node.js - 定义异步功能时,异步/等待 Node v9“意外 token 功能”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49180893/

10-16 20:58