Ich bin in der verschachtelten beobachtbaren Hölle fest und könnte mit einer Hand tun.Abflachung verschachtelte Observables
Ich habe den folgenden Code-Block
return this.findUser(term).map(users => {
return users.map(user => this.getLastLogin(user.user_id).map(last_login => {
user.last_login = last_login;
return user;
}));
});
findUser
kehrt Observable<User[]>
und getLastLogin
kehrt Observable<number>
.
Ich hoffe grundsätzlich, eine Liste von Benutzern zu holen und dann diese mit den Informationen von einem anderen Wert zu aktualisieren.
Im Moment gibt der obige Code <Observable<Observable<User>[]>
zurück.
Ich dachte, ich könnte die ursprüngliche map
durch flatMap
ersetzen, aber dies verwandelt das Objekt in <Observable<Observable<User>>
.
Die RxJS-Dokumentation ist ein wenig schwer zu entschlüsseln, also bin ich mir nicht sicher, welche Kombination von switch
, forkJoin
oder flatMap
mich dazu bringen wird, was ich brauche.
Ich hoffe, Observable<User[]>
zurückzukehren. Kann mir jemand in die richtige Richtung zeigen?
Ich denke, Ihnen ist die sauberere Antwort - zumal der Titel der Frage erwähnt verschachtelte Observablen Abflachung - aber ich bin neugierig, ob Die Array-Reihenfolge würde immer mit der des Quell-Arrays übereinstimmen: Würde die Verwendung von 'mergeMap' zu einer nicht-deterministischen Reihenfolge führen? Würde die Reihenfolge davon abhängen, welche zu verschmelzenden Observablen zuerst emittieren? – cartant
Dies ist wahr, entweder "merge" oder "mergeAll" garantiert die gleiche Reihenfolge, die ein Problem sein kann oder nicht.Wenn es jedoch ein Problem ist, könntest du 'mergeMap' durch' concatMap' ersetzen und das war's. – martin
Interessanterweise funktioniert dieser Code nicht, wenn Sie TypeScript-Klassen verwenden. Wenn es kompiliert wird, sieht es so aus, als ob 'mergeAll' in der 'findUsers'-Methode einen' User [] 'zurückgibt. Hier ist ein Link zu dem Verhalten, das ich sehe. https://jsbin.com/wiwayikiye/edit?js,console Irgendwelche Ideen? – user3750194