Aktuelle Arbeits-CodeJavascript beobachtbare Leistungsproblem
Ich habe folgendes rxjs/Observable
:
findMessages(chatItem: any): Observable<any[]> {
return Observable.create((observer) => {
let processing: boolean = false;
this.firebaseDataService.findMessages(chatItem).forEach(firebaseItems => {
if (!processing) {
processing = true;
this.localDataService.findMessages(chatItem).then((localItems: any[]) => {
let mergedItems: any[] = this.arrayUnique(firebaseItems.concat(localItems), false);
mergedItems.sort((a, b) => {
return parseFloat(a.negativtimestamp) - parseFloat(b.negativtimestamp);
});
if (this.me && mergedItems && mergedItems[0] && this.me.uid === mergedItems[0].memberId2) {
this.updateChatWithMessage(chatItem, mergedItems[0], false);
}
observer.next(mergedItems);
processing = false;
});
}
});
});
}
und
this.firelist = this.dataService.findMessages(this.chatItem);
this.firelist.subscribe(items => {
...
});
Wie Sie sehen können, ist es eine Liste von firebaseItems
zurückgibt und localItems
, die zu mergedItems
zusammengeführt werden. Das funktioniert perfekt.
Performance Enhancement
aber ich versuche, um die Leistung, die die Elemente Last zu erhöhen. Also Figur, ich möchte zuerst die localItems
laden, und dann mit der firebaseItems
zur Liste hinzufügen.
Also versuche ich, die folgende Funktion:
findLocalMessages(chatItem: any): Observable<any[]> {
return Observable.create((observer) => {
this.localDataService.findMessages(chatItem).then((localItems: any[]) => {
localItems.sort((a, b) => {
return parseFloat(a.negativtimestamp) - parseFloat(b.negativtimestamp);
});
observer.next(localItems);
});
});
}
und es nennen wie folgt:
this.firelist = this.dataService.findLocalMessages(this.chatItem);
this.firelist = this.dataService.findMessages(this.chatItem);
this.firelist.subscribe(items => {
...
});
Problem
Dies hat jetzt einen Fehler eingeführt, dass es jetzt 2 Observables
und die Ergebnisse sind nicht wie erwartet. Die Sortierreihenfolge ist falsch, und einige der Elemente werden aus irgendeinem Grund nicht zur this.firelist
hinzugefügt.
Frage
Was ist der beste Weg, dies zu umgehen?
Ich denke mich, ob es möglich ist, die findLocalMessages
Observable
nur um einmal gefeuert, und es funktioniert dann nie wieder, da die findMessages
Observable
die Liste beibehalten wird. Ist das möglich? Ich habe auf die Observable
API geschaut, und kann nicht scheinen, wie man das macht.
Jede Hilfe wird geschätzt.
Seine 'rxjs'. Entschuldigung, ich werde die Frage aktualisieren. – Richard