异步箭头函数SyntaxError:意外令牌(

时间:2019-03-15 22:26:24

标签: node.js firebase express npm async-await

我正在Windows PC上使用节点版本10.15.3,npm版本6.9.0,VS代码和firebase-functions版本2.2.0。将async / await添加到我的app.post()函数中会导致以下情况:

 Function failed on loading user code. Error message: Code in file 
 index.js can't be loaded.
 Is there a syntax error in your code?
 Detailed stack trace: /user_code/index.js:31
 app.post('/pay-now', async (req, res) => {
                       ^

 SyntaxError: Unexpected token (
     at createScript (vm.js:56:10)
     at Object.runInThisContext (vm.js:97:10)
     at Module._compile (module.js:549:28)
     at Object.Module._extensions..js (module.js:586:10)
     at Module.load (module.js:494:32)
     at tryModuleLoad (module.js:453:12)
     at Function.Module._load (module.js:445:3)
     at Module.require (module.js:504:17)
     at require (internal/module.js:20:19)
     at getUserFunction (/var/tmp/worker/worker.js:439:24)

这是我的app.post():

app.post('/pay-now', async (req, res) => {
    // charge user's card
    const charge = await makeCharge(req, res)
    // store order info in database, returns address of order
    const address = await storeOrder(req, res, charge.id)
    // send email to customer
    await emailHandler.sendCustomerEmail(req, res)
    // send email to company letting them know they have a new order
    await emailHandler.sendLTEmail(req, res, address, true)
    return res.sendStatus(200)
})

我尝试删除app.post()中的async和await,但是随后在makeCharge函数中首次使用async时遇到了相同的错误。有什么问题的想法吗?

2 个答案:

答案 0 :(得分:0)

当前,Cloud Funtions的默认运行时是节点6,该节点不支持异步/等待。您将需要将package.json编辑为target the node 8 runtime,该版本使用确实具有异步/等待功能的JavaScript版本。

  

通过将引擎字段添加到package.json文件来设置版本   在初始化期间在您的functions /目录中创建的文件。   例如,如果您只想使用版本8,则将package.json编辑为   添加此行:

{
"version": "0.2.0",
"configurations": [
    {
        "name": "Launch index.html",
        "type": "chrome",
        "request": "launch",
        "file": "${workspaceFolder}/index.html"
    }
]

如果您已经部署了该功能的某个版本,则需要将其删除并在完成此配置后再次部署。

答案 1 :(得分:-1)

也许您应该在这里看看:Syntax for async arrow function

您的模块没有问题,我认为arrow函数编写得不好。

编辑:

我对箭头功能了解不多,您可以尝试使用“正常功能”之类的东西吗?

  app.post('/pay-now', async function Myfunction (req, res) {
  // do something
}