2017-10-16 1 views
0

Ich habe kleines Problem mit der Verwaltung der Download-Daten von Firebase zu meiner ionischen Anwendung.So verwalten Sie das Herunterladen von Daten in ionic 2

Zum Beispiel: Im Normalfall [wie unten code], das Herunterladen Daten normal [wie dieses Bild]

enter image description here

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

Aber wenn ich gebraucht "setInterval" [so wie unten code], das Herunterladen von Daten increase [wie dieses Bild]

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

Gibt es eine Möglichkeit, die Download-Daten so zu gestalten, dass sie normal sind?

+0

Nur um sicher zu sein: Sie fragen, warum gibt es höhere Netzwerkaktivität, wenn Sie etwas von Firebase alle 250ms vs holen, wenn Sie es einmal holen ?! – David

+0

Ja .. ich don Ich weiß nicht warum, wenn ich "subscribe" benutze, um ein neues Array zu erstellen, die Nutzung des Netzwerks erhöht .. Noch weiß ich nicht, wie kann ich dieses Problem lösen –

+1

Weil durch das Abonnement der Firebase ob servables Sie holen die Daten jedes Mal, wenn Sie Ihre Methode aufrufen. – David

Antwort

1

Wie hier angefordert ist eine überarbeitete Version Ihres Codes. Ich muss sagen, ich habe es nicht getestet, aber es sollte das Konzept umreißen. Die Methode joinObjects() wird jedes Mal aufgerufen, wenn ein aktualisierter Wert/eine aktualisierte Liste eintrifft, und nicht in einem festen Intervall, das viel Overhead verursacht. Beachten Sie die neue Instanz Variablen Ich habe und daß ich Ihre Observablen favoritesList$ umbenannt und questionsList$ (der Dollar-Suffix ist eine gute Übung, um anzuzeigen, dass es sich um eine beobachtbar ist (kein Abonnement, Wert, ...).

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

Ich hoffe, dies bringt Sie Ihrem Ziel näher!

+0

Vielen Dank v.much, jetzt habe ich die Idee verstanden ... weil ich ein paar Tutorials gelesen habe, aber ich habe diesen Punkt nicht verstanden v.well .. –

+0

Ich bin froh, dass ich dir helfen konnte! – David

Verwandte Themen