Javascript 侦听更改时查询多个键-Firebase
我用它作为参考,因为它非常相似 如果我有一组已定义的键:Javascript 侦听更改时查询多个键-Firebase,javascript,firebase,firebase-realtime-database,Javascript,Firebase,Firebase Realtime Database,我用它作为参考,因为它非常相似 如果我有一组已定义的键: -Ke1uhoT3gpHR_VsehIv -Ke8qAECkZC9ygGW3dEJ -Ke8qMU7OEfUnuXSlhhl 而且还要知道它们都存在于一个节点下(比如说/items),我如何查询它们,同时还要监听这些键上的更改(即不使用myRef.one(value),而是使用myRef.on('value',snapshot=>{…}) 我知道这是可能的: var keys = [ "-Ke1uhoT3gpHR_VsehIv",
-Ke1uhoT3gpHR_VsehIv
-Ke8qAECkZC9ygGW3dEJ
-Ke8qMU7OEfUnuXSlhhl
而且还要知道它们都存在于一个节点下(比如说/items
),我如何查询它们,同时还要监听这些键上的更改(即不使用myRef.one(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());
});
});
但它是一个静态快照。在侦听更改时是否可以执行相同的操作?我也一直在寻找它。因此它似乎不存在,因为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);
});
唯一的改进是定义回调函数,或者创建尽可能多的回调函数,只要你有键可以监听,然后把ref放在变量中。你想实现什么?因为
Promise.all()
在链接答案中是为了确保您可以检测到何时加载了所有数据。既然您表示要使用常规的/on()
侦听器,那么等待其值的用例是什么?@FrankvanPuffelen这些键表示提要中显示的作业。我希望提要中的作业能够实时更新(假设作业的创建者更新了作业时间)。因此,这听起来像是常规的on()
侦听器可以正常工作,您不需要承诺。all()
。您问题中的代码是您链接的我的答案的1:1副本。您是否尝试使用on()附加侦听器
已经存在?是的,我附加了它。我想处理on()
侦听器的唯一方法是循环通过如下键:for(让I=0;I{//处理所有传入的数据}
这是正确的方法吗?它是在一个请求中完成的吗?我想我希望有一种方法可以将所有承诺存储在一个数组中,并在第一次读取时知道像Promise。所有的都完成了。因为on()
不返回承诺,所以不能使用Promise.all()
使用它。但是您可以循环使用与找到的代码类似的所有键,并在()上附加一个常规的侦听器。
如果这会导致问题,请通过编辑问题发布。