Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在Firebase云函数中包含异步函数(eslint“解析错误:意外令牌函数”) 问题_Javascript_Node.js_Firebase_Google Cloud Functions_Firebase Cli - Fatal编程技术网

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')

  • Lint不喜欢此解决方案。

    Node.js 8-Promisify 按照帖子中的建议启用Node.js8

  • “引擎”:{“节点”:“8”}
  • 使用
    promisify

    const writeFile=util.promisify(fs.writeFile)

    返回writeFile(tempFile,response.audioContent,'binary')

  • Pre Node.js 8-手动转换 这是一种较旧的方法,可以将回调转换为承诺,正如本文中关于Google文本转换语音(TTS)的更具体问题所述


    您的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”解决了此问题。我收到了相同的问题,并通过遵循您的解决方案解决了此问题,非常感谢。请阅读以改进您答案中的格式,并查看以改进您的答案。