2017-08-12 86 views
0

我有一个拥有多个用户的Firebase数据库,并且我想为每个用户注册一个单独的侦听器。这是因为整个数据库上的监听器都是多余的,因为每次更改每个用户的数据时,所有用户的数据都将在回调中返回。如何注册多个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

你只使用一个参考来尝试存储所有你需要的参考。将它们储存在裁判的数组来代替:

var company_ref = [] 
for (var i = 0; i < 26; i++){ 
    company_ref[i] = company.child(i); 
    // do stuff with company_ref[i] 
} 

记住,您使用的是被称为id变量还承担而不必定义它,至少不会告诉你它的方式。也许你的意思是i

+0

谢谢,这工作! – Alex

相关问题