2017-09-25 17 views
1

我使用this question作为参考,因为它非常相似。在侦听更改时查询多个键 - Firebase

如果我有一组自定义键的:

-Ke1uhoT3gpHR_VsehIv 
-Ke8qAECkZC9ygGW3dEJ 
-Ke8qMU7OEfUnuXSlhhl 

也知道他们都做一个节点下存在(比方说/items),我将如何查询它们,同时监听变动对这些键(又名不使用myRef.once(value)但使用myRef.on('value', snapshot => { ... })

我知道这是可能的:

var keys = [ 
    "-Ke1uhoT3gpHR_VsehIv", 
    "-Ke8qAECkZC9ygGW3dEJ", 
    "-Ke8qMU7OEfUnuXSlhhl" 
]; 
var promises = keys.map(function(key) { 
    return firebase.database().ref("/items/").child(key).once("value"); 
}); 
Promise.all(promises).then(function(snapshots) { 
    snapshots.forEach(function(snapshot) { 
    console.log(snapshot.key+": "+snapshot.val()); 
    }); 
}); 

,但它是一个ST atic快照。聆听变化时可以做到这一点吗?

+0

你想完成什么?因为链接答案中的Promise.all()是为了确保您可以检测何时加载了所有数据。既然你指出你想使用常规的/ on()监听器,那么等待它们的值的用例是什么? –

+0

@FrankvanPuffelen这些键表示在Feed中显示的作业。我希望Feed中的工作能够实时更新(可以说工作的创建者更新了工作时间)。 –

+0

所以听起来像普通的'on()'监听器可以工作,并且你不需要'Promise.all()'。您问题中的代码是您链接的答案中的1:1副本。你是否已经尝试用'on()'连接监听器? –

回答

1

我也一直在寻找这个。因此,它似乎并不存在,只是因为Firebase具有高效的连接,因此无需为了连接性能而组合“查询”。

因此,您最终会为所有密钥设置on('value', ...)事件侦听器。你可以写的代码看起来是这样的基础上,在你的问题中给出的代码片段:

var keys = [ 
    "-Ke1uhoT3gpHR_VsehIv", 
    "-Ke8qAECkZC9ygGW3dEJ", 
    "-Ke8qMU7OEfUnuXSlhhl" 
]; 
function itemUpdate(snapshot) { 
    console.log(snapshot.key+": ", snapshot.val()); 
} 
var ref = firebase.database().ref("/items/"); 
keys.forEach(function(key) { 
    ref.child(key).on("value", itemUpdate); 
}); 

,唯一的改进是定义回调函数,否则你将创造尽可能多的回调函数为你有密钥听,第二把放置在一个变种。