如何为多个firebase引用注册侦听器

时间:2017-08-12 08:22:59

标签: node.js firebase firebase-realtime-database

我有一个包含多个用户的firebase数据库,我想为每个用户注册一个单独的监听器。这是因为整个数据库上的监听器都是冗余的,因为每次更改每个用户的数据时,所有用户的数据都将在回调中返回。

假设用户编号为0 - 25。我有以下代码:

var admin = require("firebase-admin");
var serviceAccount = require("serviceAccountCredentials.json");

var config = {
    credential: admin.credential.cert(serviceAccount),
    databaseURL: "https://test.firebaseio.com"
};
var app = admin.initializeApp(config);
var db = admin.database();

var company = db.ref('companies');


for(var i = 0; i < 26; i++){
    company_ref = company.child(i);
    company_ref.on("child_added", function(snapshot){
        console.log("child_added for " + i);
        console.log(snapshot.val());
    });
    company_ref.on("child_changed", function(snapshot){
        console.log("child_changed for " + i);
        console.log(snapshot.val());
    });
    company_ref.on("child_removed", function(snapshot){
        console.log("child_removed for " + i);
        console.log(snapshot.val());
    });
}

但是,此代码仅为用户25注册一个侦听器,并且看起来其他用户的侦听器都被垃圾收集。这样做的正确方法是什么?我必须使用多个线程吗?

1 个答案:

答案 0 :(得分:1)

您只使用一个参考来尝试存储您需要的所有参考。将它们存储在refs数组中:

Shape

另外请记住,您没有使用名为var company_ref = [] for (var i = 0; i < 26; i++){ company_ref[i] = company.child(i); // do stuff with company_ref[i] } 的变量而没有定义它,至少不是您显示它的方式。也许你的意思是id