我正在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时遇到了相同的错误。有什么问题的想法吗?
答案 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
}