我正在使用this question作为引用,因为它非常相似。
如果我有一组定义的键:
-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());
});
});
但它是静态快照。在监听变化的同时是否可以做同样的事情?
最佳答案
我也一直在找这个。所以看起来它不存在,仅仅因为 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);
});
唯一的改进是定义回调函数,否则您将创建与要监听的键一样多的回调函数,然后将引用放入变量中。
关于javascript - 在监听更改时查询多个键 - Firebase,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46408279/