如何设置循环以使用Typescript从firebase数据库中提取记录

时间:2017-03-23 20:29:11

标签: angular typescript firebase firebase-realtime-database

如何设置循环以仅提取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);
      })
    })

  });

1 个答案:

答案 0 :(得分:0)

由于您正在处理可观察对象,因此可以使用skiptake

import 'rxjs/add/operator/take';
import 'rxjs/add/operator/skip';

您可以像这样使用它们:

this.dataProvider.getNextProducts(lastASIN).skip(numToSkip).take(10).subscribe(...

只需跟踪numToSkip需要跳过的记录数量,并指定您想要拍摄的记录数量,您应该做得好。

修改

由于您尝试无限滚动,我不会使用rxjs中的skiptake。我没有使用过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个值。