Angular2 Zusammenführen von observablen
Ich habe Probleme dabei mit manchen observablen. Ich kann nicht scheinen, um zwei
observablen zu Ort schön zusammen. Sie funktioniert gut auf Ihre eigenen, aber ich
müssen beide Werte.
db.glass.subscribe( ( glass: GlassData[] ): void => {
console.log( glass ); //This prints
});
db.cassette_designs.subscribe( ( cassettes: CassetteData[] ): void => {
console.log( cassettes ): //This prints
});
Nicht alle so vertraut mit den observablen, die erste Sache, die ich versuchte, war
Schachtelung Ineinander, aber das innere scheint nicht, etwas zu tun.
db.glass.subscribe( ( glass: GlassData[] ): void => {
console.log( glass ); //This prints
db.cassette_designs.subscribe( ( cassettes: CassetteData[] ): void => {
console.log( cassettes ): //This doesn't
});
});
Dieser schien ein wenig albern zu sein, so suchte ich auf Google, um zu sehen, ob es eine
eine bessere Möglichkeit zur Vereinbarkeit von observablen und es stellt sich heraus, es sind ein paar. Ich versuchte
zip
und forkJoin
da sahen Sie die die meisten mögen, was ich tun wollte, aber
nichts würde funktionieren, entweder mit Ihnen.
Observable.zip( db.cassette_designs, db.glass, ( cassettes: CassetteData[], glass: GlassData[] ): void => {
console.log( cassettes ); //doesn't print
console.log( glass ); //doesn't print
});
Observable.forkJoin( [ db.cassette_designs, db.glass ] ).subscribe( ( data: any ): void => {
console.log( data ); //doesn't print
});
Es könnte so etwas einfaches bin ich nicht aufrufen der Funktionen korrekt, aber
Ich hätte gedacht, ich würde Sie irgendeine Art von Warnung oder Fehler an einem gewissen Punkt. tsc
haben kein problem mit dem code und ich bekomme keine Nachrichten im Entwickler
die Konsolen entweder Chrome oder Firefox.
Update
Ich habe versucht combineLatest
, aber es immer noch nicht zeigen alles in der Konsole. Ich muss etwas fehlen, aber ich bin mir nicht sicher, was. Sie arbeiten individuell.
Observable.combineLatest( db.cassette_designs, db.glass, ( cassettes: CassetteData[], glass: GlassData[] ): void => {
console.log( cassettes ); //doesn't print
console.log( glass ); //deson't print
});
Die observablen werden in der folgenden Weise:
...
public Listen( event: string ): Observable<Response>
{
return new Observable<Response>( ( subscriber: Subscriber<Response> ): Subscription => {
const listen_func = ( res: Response ): void => subscriber.next( res );
this._socket.on( event, listen_func );
return new Subscription( (): void =>
this._socket.removeListener( event, listen_func ) );
});
}
...
Dann eigentlich auf die observablen, die ich senden Sie eine hören für Antworten auf die jeweilige Veranstaltung. z.B.
...
public cassette_designs: Observable<CassetteData[]>;
...
this.cassette_designs = _socket.Listen( "get_cassette_designs" )
.map( ( res: Response ) => res.data.data );
- SO neugierig, was Ihr Projekt ist! Kassetten und Glas, und Sie sind alle zusammen spielen! Liebe es!
- Es wurde ein online-tool, erlaubt dem Anwender die Gestaltung der Türen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich das geschafft habe
combineLatest
zu arbeiten, tatsächlich zu abonnieren, um die daraus resultierendenbeobachtbar ist.
Ursprünglich war ich, dies zu tun:
Nun ich bin dabei:
Follow-up mit Ihren Ergebnissen:
1) Eine
Observable
ist ein fauler Ausführung Datentyp, das bedeutet, es wird nicht ausgeführt, nichts in der pipeline, bis es angemeldet ist. Dies gilt auch für die kombinatorische Operatoren.zip
,forkJoin
,combineLatest
, undwithLatestFrom
alle rekursiv abonnieren Sie dieObservables
dass Sie geben Sie nur nach, die Sie selbst abonniert haben.Daher:
Nicht wirklich etwas tun, bis Sie rufen
output.subscribe()
, an welcher Stellesubscribe
ist auch als aufstream1
undstream2
und Sie erhalten alle Magie der Rx.2) Ein eher kleiner Punkt, aber wenn Sie anfangen, tun Sie Ihre eigene Schöpfung, Methoden, schauen Sie zuerst in der Dokumentation zu sehen, wenn es bereits vorhanden ist. Es gibt statische Methoden für die Erstellung,
Arrays
,Promises
, Knoten-Stil Rückrufe und ja, auch standard Ereignis-Muster.Damit Ihre
Listen
Methode werden können:Hey, wenn Sie wollen, um einen einzelnen Datenstrom (beobachtbar), die strahlt eine Kombination von Daten von den 2 Quellen, check-out
combineLatest
Methode.Beide: Observable.zip und zu Beobachten.forkJoin arbeiten müssen. (Ich persönlich bevorzuge 'forkJoin' - gibt es ein array mit der gleichen Reihenfolge, wie Sie geschoben observablen, und Sie brauchen nicht eine Menge von Argumenten)
Vielleicht, wenn Sie erstellen observablen manuell (Beobachtbar.erstellen...), Ihr habt nur vergessen zu nennen, 'fertig' für beide Beobachter aus der "create" - Methode.
Ich verwendet habe, combineLatest. Ich brauchte drei API Anrufe, aber ich wollte nur ein Objekt die Kombination der drei Antworten.
Ich verfolgt habe und die Formel in diesem Beitrag:
Wird der endgültige code: