2017-10-16 66 views
0

我有一個小問題,管理firebase的下載數據到我的離子應用程序。如何管理下載數據在離子2

例如:在正常情況下[如下面的代碼],下載數據是正常的[如此圖像]

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

那麼有什麼辦法可以使下載數據如正常情況下那樣?

+0

只是爲了確定:你問爲什麼有更高的網絡活動,如果你從Firebase每250ms獲取一些東西與你獲取一次的比較?! – David

+0

是的..我不喜歡不知道爲什麼當我使用「訂閱」來創建一個新的陣列時,網絡的使用增加了。但我不知道如何解決這個問題 –

+1

因爲通過訂閱firebase ob每當你打電話給你的方法時,你都可以獲取數據。 – David

回答

1

這裏要求的是你的代碼的重構版本。我必須說我沒有測試它,但它應該概述這個概念。每當更新的值/列表到達時調用方法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(); 
    } 
} 

我希望這能讓你更接近你的目標!

+0

謝謝你v.much,現在我明白了這個想法...因爲我讀了一些教程,但我不明白這點v.well .. –

+0

我很高興我能幫助你! – David