Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/458.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在Firebase中的多个特定位置侦听数据更改?_Javascript_Firebase_Firebase Realtime Database - Fatal编程技术网

Javascript 如何在Firebase中的多个特定位置侦听数据更改?

Javascript 如何在Firebase中的多个特定位置侦听数据更改?,javascript,firebase,firebase-realtime-database,Javascript,Firebase,Firebase Realtime Database,我正在使用Firebase作为我正在开发的移动应用程序(JS Web SDK)的实时数据库,结构如屏幕截图所示,键=电子邮件,每个键都有移动用户信息,并且在node=“path”内移动位置的GPS协调 如何监听所有电子邮件(用户)的所有“路径” 直接从火场出发: 值:读取并侦听对路径整个内容的更改 此函数在启动时将运行一次,并且对于路径下的数据的每次更改将再次运行snapshot将返回user/的所有内容,这是每次更改都要返回的大量数据。您可以相应地更改ref。代码中的解决方案: var ref

我正在使用Firebase作为我正在开发的移动应用程序(JS Web SDK)的实时数据库,结构如屏幕截图所示,键=电子邮件,每个键都有移动用户信息,并且在node=“path”内移动位置的GPS协调

如何监听所有电子邮件(用户)的所有“路径”


直接从火场出发:

值:读取并侦听对路径整个内容的更改


此函数在启动时将运行一次,并且对于路径下的数据的每次更改将再次运行
snapshot
将返回
user/
的所有内容,这是每次更改都要返回的大量数据。您可以相应地更改
ref

代码中的解决方案:

var ref = new Firebase("https://<your Firebase>/mobile/users");

   users.forEach(function (childSnapshot) {
                // childSnapshot == mobile/users/email

                var data = childSnapshot.val();

                childSnapshot.forEach(function (path) {
                    if (path.key() == 'path') {

                        //create reference for each path
                        var pathRef = path.ref();

                        pathRef.limitToLast(1).on('child_added', function (childSnapshot, prevChildKey) {

                            // now you are listening on all "path" under each user/email

                        })
                    }
                })
            })
var ref=新Firebase(“https:///mobile/users");
users.forEach(函数(childSnapshot){
//childSnapshot==手机/用户/电子邮件
var data=childSnapshot.val();
childSnapshot.forEach(函数(路径){
if(path.key()==“path”){
//为每个路径创建引用
var pathRef=path.ref();
pathRef.limitToLast(1).on('child_added',函数(childSnapshot,prevChildKey){
//现在,您正在收听每个用户/电子邮件下的所有“路径”
})
}
})
})

如果需要,您可以收听特定事件:

// Get a reference to the database service
var database  = firebase.database();
var usersRef  = database.ref('whatever/users');

usersRef.on('child_added', (snapshot) => {
  console.log('user was added !!');
});

usersRef.on('child_removed', (snapshot) => {
  console.log('user was removed !!' );
});


usersRef.on('child_changed', (snapshot) => {
     console.log('user was changed !!' ;
});

有没有什么建议,如何监听多个但特定的节点,而不监听整个树,因为它是巨大的?我的应用程序就像Instagram,我有一个无限的元素卷轴,只想将消息实时输出到所需的照片,而不需要重新加载整个页面的数据。老实说,如果一个节点中的数据那么大,你可能想重新构造数据。已经找到了一个超短且轻量级的解决方案,谢谢@Dimitri嘿,如果你有其他的方法,那么你可以分享你解决这个问题的方法,然后为每个路径添加侦听器。感谢这仅在firebase未设置身份验证时有效,这意味着您的数据是公开的。
// Get a reference to the database service
var database  = firebase.database();
var usersRef  = database.ref('whatever/users');

usersRef.on('child_added', (snapshot) => {
  console.log('user was added !!');
});

usersRef.on('child_removed', (snapshot) => {
  console.log('user was removed !!' );
});


usersRef.on('child_changed', (snapshot) => {
     console.log('user was changed !!' ;
});