没有数据时,Firebase orderByChild equalTo挂起



请参阅jsfiddle:http://jsfiddle.net/237ur2tf/14/

coinref.orderByChild("uuid").equalTo("xx")...

当数据库中存在匹配项时,查询工作正常。当不匹配时,既不调用回调函数,也不调用错误函数。

我做错什么了吗?。。。该怎么办?。

非常感谢。Pat/

这是预期的行为。你小提琴上的相关片段稍长:

// Get by child uuid AND uuid exists
coinsRef.orderByChild("uuid")
        .equalTo("4D4B2118-0435-439C-BA7C-99B9BD0DA7F4")
        .on('child_added', function(snapshot) {

这段代码说"当有一个(现有的或新的)子项添加到这个查询中时,用它的快照调用我"。由于没有子级,child_added事件不会激发。

如果您想检查是否有值,您应该使用value事件:

// Get by child uuid AND uuid exists
coinsRef.orderByChild("uuid")
        .equalTo("4D4B2118-0435-439C-BA7C-99B9BD0DA7F4")
        .on('value', function(snapshot) {
    console.log("found Coin: 4D4B2118-0435-439C-BA7C-99B9BD0DA7F4");

如果你想用特定的硬币做任何事情,你需要在回调中使用forEach()

snapshot.forEach(function(child) {
    console.log("The coin has value: "+child.val());
})

你有什么理由不能按uuid存储硬币吗?听起来这已经是一个普遍独特的身份;因此,如果可以用这个密钥存储它们,查找会便宜得多:

coinsRef.child("4D4B2118-0435-439C-BA7C-99B9BD0DA7F4")
        .on('value', function(snapshot) {
    console.log("The coin has value: "+snapshot.val());
})

最新更新