我的HTTP Firebase云功能每次运行都会出现此错误:
Function execution took ****ms, finished with status: 'connection error'
它发生的不一致,但我不能完全解决问题所在。我不相信错误在我的应用程序中,因为它没有显示错误打印输出。在运行这个云功能时,我自己与firebase的连接并没有消失。
为什么Firebase会随着“连接错误”随机导致云功能执行失败?
答案 0 :(得分:23)
Function execution took ****ms, finished with status: 'connection error'
有两个主要原因:
几个未回复的承诺的例子:
exports.someFunc = functions.database.ref(‘/some/path’).onCreate(event => {
let db = admin.database();
// UNRETURNED PROMISE
db.ref(“/some/path”).remove();
return db.ref(“/some/other/path”).set(event.data.val());
});
exports.makeUppercase = functions.database.ref('/hello/{pushId}').onWrite(event => {
return event.data.ref.set('world').then(snap => {
// UNRETURNED PROMISE
admin.database().ref('lastwrite').set(admin.database.ServerValue.TIMESTAMP);
});
});
exports.makeUppercase = functions.database.ref('/hello/{pushId}').onWrite(event => {
// UNRETURNED PROMISE
event.data.ref.set('world').then(snap => {
return admin.database().ref('lastwrite').set(admin.database.ServerValue.TIMESTAMP);
});
});
要在部署代码之前帮助发现此错误,请查看this eslint rule。
要深入了解承诺,以下是一些有用的资源:
答案 1 :(得分:5)
即使该问题的答案已获批准,您可能仍已按照该答案中的步骤进行操作,但仍达到错误仍在发生的地步。
在这种情况下,GCP通知我们,Node 8 CF存在一个已知问题,并且存在此连接错误,解决方法是将节点版本更新为10。
相关的github问题:https://github.com/firebase/firebase-functions/issues/429
具体评论:https://github.com/firebase/firebase-functions/issues/429#issuecomment-577324193
答案 2 :(得分:1)
我认为可能有太多同时的firebase数据库连接:/ https://groups.google.com/forum/#!topic/firebase-talk/4RjyYIDqMVQ
答案 3 :(得分:1)
我在为 Android 设备部署uninstallTracking 事件到firebase 时遇到了同样的问题,
原来我试图访问的属性只对某些用户可用, 因此,当它找不到其他用户的属性时,它会出现此错误
所以首先检查您要访问的属性是否存在
答案 4 :(得分:0)
我已经在HTTP触发器上得到了这个,它立即调用response.end()而没有其他代码!
我有一个非常复杂的功能,工作得很好,然后由于这个错误它停止工作。我尝试了几个小时玩我的代码,直到没有任何东西,只有一个response.end(),但仍然存在错误。
我发现通过删除触发器(使用触发器触发器部署我的触发器),然后再次使用未注释的触发器进行部署似乎已修复它。
当您删除云中的触发器时,可能存在一个可以重置的错误。
希望这可以让某些人感到沮丧。
答案 5 :(得分:0)
它可能是过时的库。
转到终端
内部函数文件夹写入命令
npm过时了
这将显示所有需要更新的库。
npm更新
firebase deploy --only功能
答案 6 :(得分:0)
我仍然不时抛出return.function
。
这是我的代码
connection error
此函数实际上几乎不执行任何其他操作,但是侦听exports.onDelete = functions
.runWith({ memory: "2GB" })
.firestore.document("SchoolClasses/{classId}")
.onDelete((snap, context) => {
if (context.params.classId === "warm")
return null;
console.log("start", context.eventType, Object.keys(context.params)[0], Object.values(context.params)[0], context.timestamp, Date.now() - Date.parse(context.timestamp));
if (Date.now() - Date.parse(context.timestamp) > 60000)
return null;
const classId = context.params.classId;
// we do nothing. At least right now. maybe later we have something todo
return Promise.resolve(`classId: ${classId} was deleted!`);
});
中的文档是否已删除并返回带有某些日志值的SchoolClasses/{classId}
,因此我可以查看firebase控制台中发生的情况。
如果函数开始保暖或崩溃了,并且重试了1分钟以上,则使用if语句2快速完成该函数。
其他信息:
Promise.resolve
很少发生答案 7 :(得分:0)
出于调试目的,我做了以下事情:
response.send(someArray.length)
...导致以下结果:
response.send(218)
...这导致没有内容的响应,只是发送了一个“状态码”(即218)。为了解决这个问题,我做到了:
response.send("count: " + someArray.length)