定义异步函数时的异步/等待节点 v9“意外令牌函数”
Posted
技术标签:
【中文标题】定义异步函数时的异步/等待节点 v9“意外令牌函数”【英文标题】:async/await node v9 "unexpected token function" when defining async function 【发布时间】:2018-08-17 06:22:42 【问题描述】:我想在我的应用程序中使用 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
请帮忙!
【问题讨论】:
错误是在运行脚本时发生的,还是只是在 IDE 中发生? 除了我在 node js 环境中使用的 c9 IDE 之外,我没有在其他任何地方运行它 您是否尝试过在命令行上运行,例如节点 myscript.js 看看你得到了什么? 任何版本的 Node > 7.6 都应该没有 async 关键字的问题,这就是为什么我怀疑这是 C9 设置中的问题。 【参考方案1】:我认为您不需要 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 调用函数时,您通常会使用返回承诺的函数。
所以我也会像这样更改 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/
【讨论】:
我的错误,删除了以前的消息,通过终端运行它!谢谢我是新手,我应该去哪里解决这个问题?return Promise.resolve(service._id);
不是必需的。你可以做return service._id
。从 .then()
处理程序返回的值成为承诺链的解析值。
嘿@mtts,我想这是一个C9问题,值得在那里检查设置。目标是什么版本的 JavaScript 等等。如果您不能针对 Node 的最新版本,我会感到非常惊讶。以上是关于定义异步函数时的异步/等待节点 v9“意外令牌函数”的主要内容,如果未能解决你的问题,请参考以下文章