javascript - 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);
});
错误如下:
编辑--- 所以它似乎是间歇性的。我发出一条消息,然后等待并发出另一条消息——一个返回错误,另一个返回所需的结果。
也许它与时间戳(服务器时间戳)相关联?
编辑 -
所以我将代码更改为以下内容:
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-admin 更新到最新版本 (5.13.1) 后,它工作正常。firebase-functions v2 似乎需要 firebase-admin 5.13.0 或更高版本!
推荐阅读
- c++ - 处理桥接模式之间的依赖关系
- python - Python:检查列表中的 n 个元素是否存在于字符串中;任何()和所有()之间的中间立场?
- sql - SQL Group By + Count 与多个表
- java - Hibernate查询真的比SQL更省时间吗?
- sql - 不明确的列名“ProductNumber”
- php - 在 PHP 循环中为每个 SHELL_EXEC 设置超时
- python - 如何从 python 覆盖单元测试中省略(删除)虚拟环境(venv)?
- javascript - Reactjs无法打印ID
- reactjs - 如何让 reactJS 呈现状态变量
- eclipse - Eclipse 在运行或调试期间未使用 gradle 依赖项 jar