Firebase orderByChild equalTo在没有数据时挂起

时间:2015-12-04 00:16:11

标签: javascript firebase

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

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

当数据库中存在匹配项时,查询工作正常。 如果没有匹配,则不会调用回调函数或错误函数。

我做错了什么?......这会是什么方式?

非常感谢。 PAT /

1 个答案:

答案 0 :(得分:2)

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

// 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());
})