2017-01-30 6 views
0

Ich versuche, Infinite-Scroll in einer Ionic2 + Meteor Mobile App, die die Kontakte listet. Im folgenden Code gibt die Funktion findContacts() 10 Kontakte gleichzeitig zurück. Kontakte: Beobachtbar;kombinieren RxJs Observable Array

Dieser Code wird jedes Mal aufgerufen, wenn der Benutzer zum Ende der Liste blättert und die nächsten 10 Kontakte erhält. Aber das Problem ist, dass es sich nicht um die bereits aufgelisteten Kontakte handelt. Es zeigt nur die neu gezogenen 10 Kontakte. Ich habe versucht, Observable.concat, aber es gibt keine gewünschten Ergebnisse. Wenn ich MergeMap ausprobiert habe, geht es indifferente Schleife und Fehler raus. Könnten Sie mir bitte mitteilen, wie man Observable Array-Objekte kontrainieren kann? Jede Hilfe wird sehr geschätzt. Ich stecke jetzt seit mehr als einer Woche mit diesem Problem fest. Danke.

+0

Mit den folgenden Zeilen wird die bestehenden contats jedes Scroll-Ende ersetzen. if (this.contactsSub) { this.contactsSub.abbestellen(); } this.contactsSub = MeteorObservable.subscribe ('Kontakte', Optionen) .subscribe (() => { MeteorObservable.autorun(). Subscribe (() => { if (this.contacts) { diese .contacts = this.contacts.concat (this.findContacts());} else { this.contacts = this.findContacts();} }); }); – annadurai

Antwort

0

Sie können dies, indem Kontakte als Array erreichen

contacts: Array<any>= [] 
findContacts() :Observable<Contact[]> { 
    /* logic to pull Contacts is here ...*/ 
    } 

    this.contactsSub = MeteorObservable.subscribe('contacts', options).subscribe(() => { 
     MeteorObservable.autorun().subscribe(() => { 
      this.findContacts().subscribe(data => { 
       this.contacts = this.contacts.concat(data); 
     }); 
     }); 
    }); 
+0

Danke Sudheer für das Update. Es scheint, als ob die Subscribe-Funktion nicht in findContacts verwendet werden kann. Aber basierend auf Ihrem Codebeispiel habe ich folgendes versucht this.contacts = this.contacts.concat (this.findContacts()); Dies scheint keinen Fehler zu werfen. Ich entferne auch den Abmeldeanruf, den ich oben hatte subscribe scheint die Daten zu bestehenden Observable hinzuzufügen. Aber es scheint, dass funktioniert nur bis zu 300 Datensätze/Kontakte. Danach scheint es die Anwendung einzufrieren. Ich bin mir nicht sicher, ob es eine Begrenzung für unendlich scroll gibt. – annadurai

+0

Längste mögliche Array könnte 232-1 = 4,294,967,295 = 4,29 Milliarden Elemente haben. Es hängt also nicht mit der maximalen Größe des Typoskripts zusammen. Es kann ein anderer Grund sein. –

+0

Mit den folgenden Zeilen ersetzt es die bestehenden Contats jedes Scroll-Ende. if (this.contactsSub) { this.contactsSub.abbestellen(); } this.contactsSub = MeteorObservable.subscribe ('Kontakte', Optionen) .subscribe (() => { MeteorObservable.autorun(). Subscribe (() => { if (this.contacts) { diese .contacts = this.contacts.concat (this.findContacts()); } sonst { this.contacts = this.findContacts(); } }); }); – annadurai