Firebase Cloud函数-上下文参数参考带来了错误:firestoreInstance.settings不是快照构造函数中的函数

时间:2018-07-31 01:11:14

标签: javascript firebase google-cloud-firestore google-cloud-functions

给出简单功能;如果我仅控制台日志“上下文”,则返回带有两个参数的日志,但是如果我按照以下示例专门控制台日志(或以其他方式引用)单个参数,则会出现此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 error response

编辑--- 因此,它似乎是断断续续的。我触发了一条消息,然后等待并触发了另一条消息-一个返回了错误,另一个返回了所需的结果。

intermittent error

也许链接到时间戳(服务器时间戳)?

编辑-

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

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));
});

看来我们又回到了错误-偶尔有人成功通过了。延迟背景/延长观察者订阅时间是否可能导致类似问题?

这是上下文的控制台日志,要求提供注释:

successful context inbetween intermittent operation

出于记录目的,我尝试删除消息之间的令牌,但该令牌应被捕获。我在设备令牌的开头添加了一些字符,它返回了通常的错误-我将继续测试,也许如果令牌无效并且需要更新,这是您得到的错误吗?

编辑-

我不为人知的结论是,在某种形式的缓存方法形式化功能之前,功能起步还很冷-也许由于在这些“固化”时刻之间进行测试,我可能会遇到间歇性错误。如您所见,它从错误到延迟到几乎立即发生。如果知道的人有一些知识,仍然希望在这个问题上有一些澄清。

Intermittent Firebase function responses

编辑-

我发现,如果时间流逝,工作功能可能会死掉,那么它似乎已经死了,并且可能像僵尸一样呆滞,然后又开始执行更多的处决并恢复健康:

lazerus

1 个答案:

答案 0 :(得分:3)

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