使用火基云功能时,我是否可以通过快照获取参考?

时间:2018-06-16 09:12:14

标签: javascript firebase-realtime-database google-cloud-functions

我写这个简单的firebase云功能只是为了熟悉产品!

所有这一切都是复制添加到“userWriteable / userProfiles /”

的数据

在文档中,您总是使用onCreate回调中返回的快照看到它们,以获取要写入的新数据库引用。

    const functions = require('firebase-functions');

    const admin = require('firebase-admin');
    admin.initializeApp();


    exports.copyProfileFunctionA = functions.database.ref('userWriteable/userProfiles/{userId}')
        .onCreate((snapshot, context) => {
            // Grab the current value of what was written to the Realtime Database.
            const original = snapshot.val();

            return snapshot.ref.root.child(`userWriteable/userProfileCopies/${context.params.userId}`).set(original);
        });

    exports.copyProfileFunctionB = functions.database.ref('userWriteable/userProfiles/{userId}')
        .onCreate((snapshot, context) => {
            // Grab the current value of what was written to the Realtime Database.
            const original = snapshot.val();
            return admin.database().ref(`userWriteable/userProfileCopies/${context.params.userId}`).set(original);
        });

是否有这样的理由,或者我可以像函数copyProfileFunctionB中的那样做吗?

使用functionA而不是functionB是否有任何性能/成本优势?

两个函数都写入“userWriteable / userProfileCopies /".

通过admin.database()获取参考的费用更高吗?

1 个答案:

答案 0 :(得分:1)

最好使用快照中的ref,因为它由已经初始化并且可能已经连接的admin SDK实例提供支持。直接初始化和使用Admin SDK是可以的,但它可能导致您的函数等待另一个连接(如果尚未连接),现在运行代码的每个服务器实例可能都与您的数据库保持两个连接。