Firebase云函数以代码16退出错误代码16是什么?我在哪里可以找到更多信息?
firebase上的一个my cloud函数退出时出现错误,代码为16 我试着用谷歌搜索并找出那个代码是什么,但一点运气都没有Firebase云函数以代码16退出错误代码16是什么?我在哪里可以找到更多信息?,firebase,google-cloud-functions,Firebase,Google Cloud Functions,firebase上的一个my cloud函数退出时出现错误,代码为16 我试着用谷歌搜索并找出那个代码是什么,但一点运气都没有 Error: Process exited with code 16 at process.on.code (/srv/node_modules/@google-cloud/functions-framework/build/src/invoker.js:393:29) at process.emit (events.js:189:13) at
Error: Process exited with code 16
at process.on.code (/srv/node_modules/@google-cloud/functions-framework/build/src/invoker.js:393:29)
at process.emit (events.js:189:13)
at process.EventEmitter.emit (domain.js:441:20)
at process.exit (internal/process/per_thread.js:168:15)
at logAndSendError (/srv/node_modules/@google-cloud/functions-framework/build/src/invoker.js:184:9)
at process.on.err (/srv/node_modules/@google-cloud/functions-framework/build/src/invoker.js:390:13)
at process.emit (events.js:189:13)
at process.EventEmitter.emit (domain.js:441:20)
at emitPromiseRejectionWarnings (internal/process/promises.js:119:20)
at process._tickCallback (internal/process/next_tick.js:69:34)
在哪里可以找到报告的错误代码,以便了解函数退出的原因 显然,在调查之后,错误的意思是:
头已经发送了
我的代码中有一个带有标题的响应。send()
,后来,我又发送了另一个响应
如果Firebase团队能够详细阐述这些问题并提供一些文档,而不是让我们蒙在鼓里,那就太好了(据我所知)可能的原因是云功能的不正确终止 下面是他们所说的:
- 解析执行异步处理的函数(也称为 “后台函数”),返回JavaScript承诺
- 使用
,res.redirect()
,或res.send()
res.end()
- 使用
;声明返回终止同步函数
res
或response
我还看到退出代码为16的过程与以下过程同时发生:
Error: Could not load the default credentials. Browse to https://cloud.google.com/docs/authentication/getting-started for more information.
at GoogleAuth.getApplicationDefaultAsync (/srv/functions/node_modules/google-auth-library/build/src/auth/googleauth.js:161:19)
at process._tickCallback (internal/process/next_tick.js:68:7)
有同样的问题。正如@cDitch提到的,我的代码不是100%完整的。然而,对我来说最大的问题是过时的软件包
我需要升级firebase管理员、firebase功能和firebase工具以及eslint
通过运行以下命令,可以查看哪些软件包已过时:
npm outdated
然后,我将package.json中的依赖项手动更改为npm提到的最新版本
执行此操作后,可能会导致部署问题。至少我是这样的。完全卸下node_模块并重新安装,修复了此问题
我在package.json脚本中添加了两行代码,用于在windows上执行此操作:
"clean": "rmdir /s /q node_modules",
"reinstall": "npm run clean && npm install",
- rmdir->删除目录
- /s->删除整个树(所以全部删除)
内的文件夹)
- /q->请安静地执行此操作,这样您就不会淹没您的终端,并且必须等待所有打印行
现在可以运行以下命令
npm run clean
npm install
或
执行这些步骤。函数框架的代码实际上在存储库中是公共的(尽管没有在任何地方公布)
特别是,您可以看到使用了killInstance
的情况,这是触发退出代码16的情况:
const killInstance=process.exit.bind(process,16)代码>
这些案例是(在撰写本文时):
如果您在Firebase CLI emulator上遇到问题,请在其GitHub上发布问题。堆栈溢出可能对您不是很有用。你好,道格·史蒂文森,谢谢你的回复。我对模拟器没有任何问题。这是生产问题,我想我正在研究在哪里可以找到节点的退出代码。然后你会想在你的帖子中提供一个MCVE,这样任何人都可以重现这个问题。你最近更新过nodeJs/npm吗?我也遇到了类似的问题,但现在忘记了。降级后,我想我已经成功了。必须是我正在发送500
的头,然后函数继续运行并发送另一个头。但那是我的情况。例如,如果我知道代码16可能已经发送了标题,我就会发现这一点。我今天被这一点击中(同样,在一次错误后忘记了返回)。你在哪里找到错误代码的?你向Firebase团队报告了吗?@Leo检查发布代码的云控制台(谷歌),谢谢,但我指的是对示例代码16的解释。我只看到了你在问题上发布的内容。你确定这只是两个选项吗?而且还没有发送邮件头?如果是,我需要将此标记为正确,而不是我的答案。是的,这是唯一调用出口(16)的地方。也就是说,重复的头可能会触发一个异常,该异常可能出现在函数的未捕获异步块中,从而触发unhandledRejection,从而触发此行为,但第一个提示/答案不应该是这个(在我的情况下不是),让我将您的标记为有效,因为它更完整,并保存了这些信息。感谢这对我来说是正确的答案。当我忘记在try-catch块中写入wait
时,我遇到了这个错误,因此出现了未捕获的拒绝。
npm run reinstall