typescript - 如何在 onCreate() Firebase Cloud Code 监听器中未定义初始值?
问题描述
我确实有以下云代码函数声明:
export const fieldEnabledListener = functions.database.ref('devices/{deviceID}/fieldEnabled').onCreate((snap, context) => fieldEnabledCreated(snap, context));
下面是fieldEnabledCreated
TypeScript 中函数的实现:
async function fieldEnabledCreated(snap: DataSnapshot, context: EventContext) {
const deviceID = (context.params as any).deviceID;
try {
const deviceSnap = await (<admin.database.Reference>snap.ref.parent).once("value");
const device: Device = deviceSnap.val();
if (device.fieldEnabled) {
// Do stuff with the field.
} else {
var valueOfTheField = device.fieldEnabled
console.log(`Value is - ${valueOfTheField}`);
}
return Promise.resolve();
} catch (error) {
throw error;
}
}
结果日志表明该值为undefined
。字段的初始值如何undefined
在其 onCreate() 调用中?如果它被创造出来,它不应该带有价值吗?只是想知道我是否缺少任何东西。
解决方案
snap
将始终与刚刚创建的数据库中的快照一起提供。但是,如果稍后对其进行查询,则不能保证该值存在。在我看来,在更新发生和执行函数之间,有些东西已经删除了数据库中的父位置(您可以预期会有一些延迟,触发器不是立即的)。
推荐阅读
- java - 使用 JeMalloc 查找 Java 应用程序中的本机内存泄漏
- ios - 在应用程序运行后,是否可以在 ui 测试中以编程方式将应用程序移动到拆分视图/滑块视图?
- node.js - 如何获取 Alexa 设备的时区或本地时间
- php - Divi Builder 编辑器未显示
- java - 无法单击未使用 Appium Java for Android 应用程序启用的按钮
- django - Django Connection to MySQL RuntimeError: populate() is not reentrant
- java - 如何限制 Spring IOC 容器使用私有构造函数创建我的自定义对象
- java - 如何使用 GreenDAO 执行原始查询
- c# - 身份声明超时
- javascript - 文本没有换行,并且正在获取屏幕反应本机