首页 > 解决方案 > Firebase Cloud Functions - 上下文参数参考带来错误:firestoreInstance.settings 不是 snapshotConstructor 的函数

问题描述

给定简单的功能;如果我只是控制台日志“上下文”,我会得到一个带有参数的日志,但是如果我按照下面的示例专门控制台日志(或以其他方式引用)单个参数,则会出现此firestoreInstance.settings错误。如果有人能指出我正确的方向,我将不胜感激。

import * as functions from 'firebase-functions';
import * as admin from 'firebase-admin';

admin.initializeApp();

exports.newNotification = functions.firestore
.document('/messages/{senderUsername}/threads/{recipientUsername}/lines/{docId}')
.onCreate((snap, context) => {
  const message = snap.data();
  const sender = context.params.senderUsername;
  const recipient = context.params.recipientUsername;
  console.log('Notifying', message, sender, recipient); 
});

错误如下:

Firestore / Firebase Cloud Functions 错误响应

编辑--- 所以它似乎是间歇性的。我发出一条消息,然后等待并发出另一条消息——一个返回错误,另一个返回所需的结果。

间歇性错误

也许它与时间戳(服务器时间戳)相关联?

编辑 -

所以我将代码更改为以下内容:

exports.newNotification = functions.firestore.document('/messages/{senderUsername}/threads/{recipientUsername}/lines/{docId}')
.onCreate((snap, context) => {
  const message = snap.data();
  const sender = context.params.senderUsername;
  const recipient = context.params.recipientUsername;
  console.log('Notifying', message, sender, recipient);
  const deviceRef = admin.firestore().doc(`/devices/${recipient}`);
  deviceRef.get().then(doc => {
    const val = doc.data();
    const payload = {
      notification: {
        title: 'New Message!',
        body: `${sender}: ${message.msg}`
      }
    };
    const token = val.token;
    return admin.messaging().sendToDevice(token, payload);
  }).catch(err => console.log(err));
});

看来我们又回到了错误——偶尔会成功通过。后台延迟/长期观察者订阅会导致这样的问题吗?

这是上下文的控制台日志,作为请求的评论:

间歇操作之间的成功上下文

作为记录,我尝试删除消息之间的令牌,并按原样捕获。我在设备令牌的开头添加了一些字符,它返回了通常的错误 - 我将继续测试,也许如果令牌无效并且需要更新,这就是你得到的错误?

编辑 -

我不知情的结论是,在函数以某种缓存方法形式化之前,它们会出现冷启动——也许由于在这些“固化”时刻之间的测试,我会遇到间歇性错误。正如你所看到的,它从错误到延迟到几乎是即时的。如果知道的人有一些,仍然会喜欢这个主题的一些澄清。

间歇性 Firebase 函数响应

编辑 -

我发现如果时间流逝,工作功能可能会死掉,然后它似乎会死而复生,并且在它以您的更多处决为食并再次变得健康之前可能会有点迟钝的僵尸:

拉泽鲁斯

标签: javascriptfirebasegoogle-cloud-firestoregoogle-cloud-functions

解决方案


将 firebase-admin 更新到最新版本 (5.13.1) 后,它工作正常。firebase-functions v2 似乎需要 firebase-admin 5.13.0 或更高版本!


推荐阅读