代码之家  ›  专栏  ›  技术社区  ›  Ali H

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

  •  0
  • Ali H  · 技术社区  · 7 年前

    我在管理firebase的下载数据到我的ionic应用程序方面有点小问题。

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

    enter image description here

    constructor(...){
        this.questionsList = this.afd.list('/questions/');
    }
    

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

    enter image description here

    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();
                }
            })
        })
    }
    

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

    1 回复  |  直到 7 年前
        1
  •  1
  •   David    7 年前

    joinObjects() 每次更新的值/列表到达时调用,而不是在固定的时间间隔内调用,这会产生大量开销。注意,我添加了新的实例变量,并将您的观察对象重命名为 favoritesList$ questionsList$ (美元后缀是一种良好的做法,表明它是可观察的(不是认购、价值等)。

    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();
      }
    }
    

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