2017-06-01 250 views
0

我查询FB在我下面的函数:火力地堡ORDERBY查询返回null

getLimit: function(artistId, limit) { 
    console.log(FBURL + 
         'songs?orderBy=\"artist_timestamp\"&startAt=\"' + 
         artistId + 
         '_\"&endAt=\"' + 
         artistId + 
         '_9999\"&limitToLast=' + 
         limit + 
         ''); 

    ref= new Firebase(FBURL + 
         'songs?orderBy=\"artist_timestamp\"&startAt=\"' + 
         artistId + 
         '_\"&endAt=\"' + 
         artistId + 
         '_9999\"&limitToLast=' + 
         limit + 
         ''); 

    console.log(ref); 

     ref.on('value', (snapshot) => { 
     console.log("hello"); 
     var val = snapshot.val(); 
     console.log(val); 
    }); 
    results = $firebaseArray(ref); 
     results.$loaded().then(function() { 
    console.log("loaded record:", results.$id); 

    // To iterate the key/value pairs of the object, use angular.forEach() 
    angular.forEach(results, function(value, key) { 
     console.log(key, value); 
    }); 
}); 
    return results; 
    } 

当我看到我对第一console.log我试图通过复制和粘贴重现null导致终端呼叫什么网址在逐字参数new Firebase()成卷曲要求如下:

curl "the-exact-url-except-add-dot-json" 

这是我所传递给new Firebase()的基本格式:

https://my-proj.firebaseio.com/songs?orderBy="artist_timestamp"&startAt="foo_"&endAt="foo_9999"&limitToLast=7 

所以当我蜷缩

curl 'https://my-proj.firebaseio.com/songs.json?orderBy="artist_timestamp"&startAt="foo_"&endAt="foo_9999"&limitToLast=7' 

它的工作原理,但是当我把前者URL的快照我在on('value')回调

得到null和我得到的结果,我希望这是一个对象song键和对象。

然而,当我得到的ref以及转换为firebaseArray并调用回调$loaded后两个快照我得到在这两种情况下null。我不确定发生了什么事情会使结果出现在终端中,但不在代码中。

回答

1

您无法将包含查询参数的网址传递到Firebase构造函数中。相反,您可以通过调用位置引用上的相应方法来添加它们。例如。

ref = new Firebase(FBURL + 'songs'); 
var query = ref.orderByChild("artist_timestamp") 
       .startAt(artistId) 
       .endAt(artistId+'_9999') 
       .limitToLast(limit); 

我也高度建议您迁移到“新”火力地堡SDK,这是记录在这里:https://firebase.google.com/docs/database/web/start。使用更新的SDK(您使用的SDK至少一年)将确保您找到更多有用的文档,并且有更多的开发人员可以提供帮助。