在Firebase

时间:2016-11-03 16:14:22

标签: javascript firebase firebase-realtime-database lazy-loading nosql

我正在尝试使用Firebase V3延迟加载项目。我已经denormalized了我的数据,但我想更进一步。

到目前为止,我尝试使用查询.limitToLast()过滤掉数据,如下所示:

var limitLength = 20;
var orderNode   = "price";

firebase.database().ref(refPath).orderByChild(orderNode).limitToFirst(limitLength).on('value', function(snapshot) {
   //success: snapshot.val()
}, function(error){
   //error
});

问题是,当我将长度增加到40时,Firebase也会重新加载前20个项目。 limitLength增加时,这显然会影响我的表现。

如何克服这个问题?即我怎样才能加载21 ... 40位置的数据?

1 个答案:

答案 0 :(得分:1)

您无法告诉查询跳过前20个项目。但是你可以告诉它开始一个特定的项目。有了它你可以完成几乎相同的事情,区别在于你如何实现它以及连续查询对之间的单个重叠项。

var limitLength = 20;
var orderNode   = "price";
var latestKey, latestProp;

var location = firebase.database().ref(refPath);
var query = location.orderByChild(orderNode).limitToFirst(limitLength);
query.on('value', function(snapshot) {
   snapshot.forEach(function(child) {
       latestKey = child.key;
       latestProp = child.val()[orderNode];
   });
   query = location.orderByChild(orderNode).startAt(latestProp, latestKey).limitToFirst(limitLength+1);
}, function(error){
   //error
});