如何设置循环以仅提取10条记录,然后使用Typescript从firebase数据库中提取不同的10条记录。
我有一个函数返回前10个,但现在我想抓住下一个10
his.dataProvider.getProducts().subscribe((products) => {
this.products = products;
//Pull an Array of ASINs from Firebase Database
this.products.forEach(product => {
this.asins.push(product.ASIN)
this.productKey.push(product.$key)
//console.log(this.productKey.toString());
var lastASIN = this.productKey.pop();
console.log (lastASIN);
return this.dataProvider.getNextProducts(lastASIN).subscribe((products) => {
this.products.forEach(product => {
this.asins.push(product.ASIN)
this.productKey.push(product.$key)
var newASIN = this.productKey.pop();
console.log (newASIN);
})
})
});
答案 0 :(得分:0)
由于您正在处理可观察对象,因此可以使用skip
和take
。
import 'rxjs/add/operator/take';
import 'rxjs/add/operator/skip';
您可以像这样使用它们:
this.dataProvider.getNextProducts(lastASIN).skip(numToSkip).take(10).subscribe(...
只需跟踪numToSkip
需要跳过的记录数量,并指定您想要拍摄的记录数量,您应该做得好。
修改强>
由于您尝试无限滚动,我不会使用rxjs中的skip
和take
。我没有使用过firebase api,但在快速查看之后,我会修改你的firebase查询以使用startAt()
和limitToFirst()
Firebase JS SDK函数。有一个很好的例子here。文档是here。但要点是:
new Firebase("https://examples-sql-queries.firebaseio.com/widget")
.startAt(null, lastWidgetOnPrevPage)
.limitToFirst(LIMIT+1) // add one to limit to account for lastWidgetOnPrevPage
.once('value', function(snap) {
var vals = snap.val()||{};
delete vals[lastWidgetOnPrevPage]; // delete the extraneous record
console.log('widgets on this page', vals);
});
使用startAt()
查询超出所提供值的值。使用limitToFirst(10)
获取从startAt()
值开始的前x个值。