Firebase功能:不清楚“连接错误”

时间:2017-06-16 21:13:30

标签: firebase google-cloud-functions

我的HTTP Firebase云功能每次运行都会出现此错误:

Function execution took ****ms, finished with status: 'connection error'

它发生的不一致,但我不能完全解决问题所在。我不相信错误在我的应用程序中,因为它没有显示错误打印输出。在运行这个云功能时,我自己与firebase的连接并没有消失。

为什么Firebase会随着“连接错误”随机导致云功能执行失败?

8 个答案:

答案 0 :(得分:23)

Function execution took ****ms, finished with status: 'connection error'有两个主要原因:

  1. 尝试在Spark计划中调用非Google服务(请参阅pricing page)。这可以通过升级到付费计划来解决。
    1. 函数不知道承诺是否已解决。必须返回每个承诺,如文档here中所述。关于此问题还有blog post (with helpful video!)
    2. 几个未回复的承诺的例子:

      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)

它可能是过时的库。

  1. 转到终端

  2. 内部函数文件夹写入命令

  

npm过时了

这将显示所有需要更新的库。

  1. 要更新库,请编写命令
  

npm更新

  1. 使用以下功能部署云功能
  

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快速完成该函数。

其他信息:

  • 我正在执行Baze计划
  • 我已重试打开
  • 我在许多其他功能上都遇到同样的问题
  • 我已设置TS衬纸以防止未兑现的诺言
  • 我发布的代码是由打字稿编译器转换成的
  • Promise.resolve很少发生

答案 7 :(得分:0)

出于调试目的,我做了以下事情:

response.send(someArray.length)

...导致以下结果:

response.send(218)

...这导致没有内容的响应,只是发送了一个“状态码”(即218)。为了解决这个问题,我做到了:

response.send("count: " + someArray.length)