Javascript 在Firebase云函数中包含异步函数(eslint“解析错误:意外令牌函数”) 问题
如何将Javascript 在Firebase云函数中包含异步函数(eslint“解析错误:意外令牌函数”) 问题,javascript,node.js,firebase,google-cloud-functions,firebase-cli,Javascript,Node.js,Firebase,Google Cloud Functions,Firebase Cli,如何将asynchelper方法添加到云函数的index.js文件中?在将fs.writefile转换为Promise时,需要使用async函数才能使用wait,如本StackOverflow帖子所述:。但是,lint不赞成在index.js文件中添加exports函数之外的附加方法 错误 行84指的是辅助函数异步函数writeFile Users/adamhurwitz/coinverse/coinverse cloud functions/functions/index.js 84:7错误分
async
helper方法添加到云函数的index.js文件中?在将fs.writefile
转换为Promise时,需要使用async
函数才能使用wait
,如本StackOverflow帖子所述:。但是,lint不赞成在index.js文件中添加exports
函数之外的附加方法
错误
行84指的是辅助函数异步函数writeFile
Users/adamhurwitz/coinverse/coinverse cloud functions/functions/index.js
84:7错误分析错误:意外的令牌函数
✖ 1个问题(1个错误,0个警告)
npm错误!代码失效循环
npm错误!错误1
npm错误!函数@lint:eslint.
npm错误!退出状态1
npm错误
npm错误!在函数@lint脚本中失败
npm错误!这可能不是npm的问题。上面可能还有其他日志输出
npm错误!此运行的完整日志可在以下位置找到:
npm错误/Users/adamhurwitz/.npm/_logs/2018-12-12T01_47_50_684Z-debug.log
错误:函数预部署错误:命令以非零退出代码1终止
安装程序
index.js
助手方法:
async function writeFile(tempFile, audioContent) {
await fs.writeFile(tempFile, audioContent, 'binary');
}
尝试解决方案
按照帖子中的建议启用Node.js8
“引擎”:{“节点”:“8”}
return wait fs.writeFile(tempFile,audioContent,'binary')代码>
“引擎”:{“节点”:“8”}
promisify
const writeFile=util.promisify(fs.writeFile)代码>
返回writeFile(tempFile,response.audioContent,'binary')
您的eslint未配置为理解ECMAScript 2017语法。默认情况下,Fireabse CLI创建的.eslint.json配置文件包括以下配置:
"parserOptions": {
// Required for certain syntax usages
"ecmaVersion": 6
},
如下更改以帮助其理解async/await:
"ecmaVersion": 2017
更改.eslintrc.json中的ecmaVersion “parserOptions”:{
//某些语法用法需要
“ecmaVersion”:8
}
我尝试了以上所有对我无效的解决方案。这是由于my package.json中的语法错误造成的:
"scripts": {
"lint": "eslint ."
},
改为:
"scripts": {
"lint": "eslint"
},
正如Burak在评论中所说,当我们创建firebase函数时,这个点是默认设置的.eslint.json “解析选项”:{ //某些语法用法需要 “ecmaVersion”:6 }, 如下更改以帮助其理解async/await:
"ecmaVersion": 2017
“ecmaVersion”:2017年
package.json
“脚本”:{
“lint”:“eslint”
},
改为:
"scripts": {
"lint": "eslint"
},
“脚本”:{
“lint”:“eslint”
},
参考Captain Web和Doug Stevenson我已经在项目中的eslintrc.json文件中添加了
“ecmaVersion”:2017
,但是Lint在返回从wait
生成的承诺时仍然抛出错误:返回wait fs.writeFile(tempFile,responses[0]。audioContent,'binary')
这听起来像是另一个问题。唯一的区别是将promisify
替换为wait
。否则,writeFile
方法在使用promisify
时会按预期工作,因此我可以继续使用该方法。没错,最新版本采用的格式是env部分“引擎”中的es2017:True
:{“节点”:“8”}是我的关键,非常感谢您在目录中创建Firebase函数后,默认情况下会放置此点。然而,奇怪的是,如果你移除它,它会解决问题。到2021年2月,这仍然是一个问题。将lint改为“eslint”可以修复它。谢谢!在同一个问题上,我非常生气直到2021年5月,firebase默认设置仍为“eslint”。更改为“esling”解决了此问题。我收到了相同的问题,并通过遵循您的解决方案解决了此问题,非常感谢。请阅读以改进您答案中的格式,并查看以改进您的答案。