Firebase云函数以代码16退出错误代码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

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