Download 如何在ionic 2中管理下载数据

Download 如何在ionic 2中管理下载数据,download,ionic2,load,Download,Ionic2,Load,我在管理firebase的下载数据到我的ionic应用程序时遇到了一个小问题 例如:在正常情况下[如下面的代码],下载数据是正常的[如此图像] 但是如果我使用setInterval[如下面的代码],数据下载量会增加[如下图] 那么,有没有办法使下载的数据像正常情况一样?根据要求,这里是代码的重构版本。我不得不说,我没有测试它,但它应该概述这个概念。joinObjects方法在每次更新的值/列表到达时调用,而不是在固定的时间间隔内调用,这会产生大量开销。请注意,我添加了新的实例变量,并将您的obs

我在管理firebase的下载数据到我的ionic应用程序时遇到了一个小问题

例如:在正常情况下[如下面的代码],下载数据是正常的[如此图像]

但是如果我使用setInterval[如下面的代码],数据下载量会增加[如下图]


那么,有没有办法使下载的数据像正常情况一样?

根据要求,这里是代码的重构版本。我不得不说,我没有测试它,但它应该概述这个概念。joinObjects方法在每次更新的值/列表到达时调用,而不是在固定的时间间隔内调用,这会产生大量开销。请注意,我添加了新的实例变量,并将您的observable重命名为favoritesList$和questionsList$美元后缀表示它是一个observable而不是订阅、值,…,这是一个很好的做法

public questions;
public favorites;

constructor(...) {
  this.questionsList$ = this.afd.list('/questions/');
  this.favoritesList$ = this.afd.list('/favorites/', {
    query: {
      orderByChild: 'user_id',
      equalTo: userService.id,
    },
  });

  this.questionsList$.subscribe(updatedList => {
    this.questions = updatedList;
    this.joinObjects();
  });

  this.favoritesList$.subscribe(updatedList => {
    this.favorites = updatedList;
    this.joinObjects();
  });
}

joinObjects() {
  let TempListX = [];
  TempListX = this.questions.slice(0);
  for (let i = 0; i < this.questions.length; i++) {
    for (let j = 0; j < this.favorites.length; j++) {
      if (this.questions[i].question_id == this.favorites[j].$key) {
        TempListX[i].qTitle = this.favorites[j].title;
      }
    }
  }
  if (JSON.stringify(TempListX) === JSON.stringify(this.TempFavoritesList)) {
  } else {
    this.TempFavoritesList = TempListX.slice();
  }
}

我希望这能让你更接近你的目标

可以肯定的是:你在问,如果你每250毫秒从firebase取回一次东西,为什么会有更高的网络活动?!对我不知道为什么当我使用subscribe制作一个新阵列时,网络的使用率增加了。。我仍然不知道如何解决这个问题,因为通过订阅firebase Observable,您每次调用方法时都会获取数据。@David那么,有什么解决方案可以减少我的网络使用率吗?是的,不要调用。每250毫秒订阅一次。你应该阅读一些关于可观测和firebase的基本教程,否则你会遇到很多问题。非常感谢你,现在我明白了这个想法。。。因为我读了一些教程,但我不太理解这一点。。我很高兴能帮助你!
constructor(...){
    this.questionsList = this.afd.list('/questions/');
    this.favoritesList = this.afd.list('/favorites/',{
        query:{
            orderByChild:'user_id',
            equalTo: userService.id,
        }
    })

    this.joinObjects();
    this.refreshIntervalId=setInterval(()=>{
        this.joinObjects();
    },250);
}

joinObjects(){
    let TempListX=[];
    this.favoritesList.take(1).subscribe(data1=>{
        this.questionsList.take(1).subscribe(data2=>{
            TempListX = data1.slice(0);
            for(let i=0; i<data1.length; i++){
                for(let j=0; j<data2.length; j++){
                    if(data1[i].question_id==data2[j].$key){
                        TempListX[i].qTitle=data2[j].title;
                    }
                }
            }
            if (JSON.stringify(TempListX)===JSON.stringify(this.TempFavoritesList)) {
            }else{
                this.TempFavoritesList=TempListX.slice();
            }
        })
    })
}
public questions;
public favorites;

constructor(...) {
  this.questionsList$ = this.afd.list('/questions/');
  this.favoritesList$ = this.afd.list('/favorites/', {
    query: {
      orderByChild: 'user_id',
      equalTo: userService.id,
    },
  });

  this.questionsList$.subscribe(updatedList => {
    this.questions = updatedList;
    this.joinObjects();
  });

  this.favoritesList$.subscribe(updatedList => {
    this.favorites = updatedList;
    this.joinObjects();
  });
}

joinObjects() {
  let TempListX = [];
  TempListX = this.questions.slice(0);
  for (let i = 0; i < this.questions.length; i++) {
    for (let j = 0; j < this.favorites.length; j++) {
      if (this.questions[i].question_id == this.favorites[j].$key) {
        TempListX[i].qTitle = this.favorites[j].title;
      }
    }
  }
  if (JSON.stringify(TempListX) === JSON.stringify(this.TempFavoritesList)) {
  } else {
    this.TempFavoritesList = TempListX.slice();
  }
}