首页 > 解决方案 > 如何在 onCreate() Firebase Cloud Code 监听器中未定义初始值?

问题描述

我确实有以下云代码函数声明:

export const fieldEnabledListener = functions.database.ref('devices/{deviceID}/fieldEnabled').onCreate((snap, context) => fieldEnabledCreated(snap, context));

下面是fieldEnabledCreatedTypeScript 中函数的实现:

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() 调用中?如果它被创造出来,它不应该带有价值吗?只是想知道我是否缺少任何东西。

标签: typescriptfirebasefirebase-realtime-databasegoogle-cloud-functions

解决方案


snap将始终与刚刚创建的数据库中的快照一起提供。但是,如果稍后对其进行查询,则不能保证该值存在。在我看来,在更新发生和执行函数之间,有些东西已经删除了数据库中的父位置(您可以预期会有一些延迟,触发器不是立即的)。


推荐阅读