Wie warte ich darauf, dass ein Stream (z. B. StreamA
) einen Nicht-Null-Wert zurückgibt und dann die StreamB
-Subskriptionsfunktion aufruft. Ich bin nicht besonders interessiert an StreamA
Wert. Ich versuche wiederum, den Wert StreamB
zu erhalten, der möglicherweise aktualisiert wurde, bevor der StreamA einen Nicht-Null-Wert zurückgegeben hat und möglicherweise keine neuen Ereignisse hat.Auf einen Stream warten, bevor ein anderer Stream aufgerufen wird
Ich versuchte, pausable, indem Sie auf diese: RxJS: How can I do an "if" with Observables?, aber konnte leider nicht zur Arbeit. Dies liegt daran, dass es keine exportierte Klasse pausable
, rxjs v 5.0.0-beta.6 gibt.
Dies ist, wie weit, habe ich, wie in der Antwort.
Export-Klasse AuthService { userModel: FirebaseListObservable = this.af.database.list (/users
); Konstruktor (privat af: AngularFire) {
var user = this.currentAuthor();
var userStream = user;
this.af.auth.flatMap((d) => { console.log(d);return this.userModel.publishReplay(1); });
this.userModel
.subscribe((data) => {
var flag = false;
data.forEach((item) => {
if (item.$key && item.$key === user.uid) {
flag = true;
return;
}
});
if (flag) {
console.log('hello');
} else {
this.userModel.push({
firstName: user.auth.displayName.substr(0, user.auth.displayName.lastIndexOf(' ')),
lastName: user.auth.displayName.substr(user.auth.displayName.lastIndexOf(' '), user.auth.displayName.length),
displayPic: user.auth.photoURL,
provider: user.provider,
uid: user.uid
}
);
}
})
}
public currentAuthor():FirebaseAuthState {
return this.af.auth.getAuth();
}
Hope, kann ich mich klar ausgedrückt. Sogar ich werde jetzt verwirrt. : p.
Ich bin neu in RXJS und reaktive Programmierung. Und jede Hilfe wird geschätzt.
Und, btw, danke fürs vorbeischauen. :)
Ich habe den Code hinzugefügt, um Ihnen die Dinge etwas klarer zu machen. (Ich hoffe, das hilft). Mit dem obigen Code erhalte ich auch den folgenden Fehler im TS Compiler. 'Eigenschaft 'publishReplay' existiert nicht für den Typ 'FirebaseListObservable' .' –
ankitjain11
Nun, Sie müssen sich Ihre Typen ansehen. Im 'flatMapLatest' werden Sie sehen, dass es sich um eine Observable handelt, die zurückgegeben wird. Überprüfen Sie also, ob Ihr 'FirebaseListObservable' wirklich beobachtbar ist. Sie finden 'publishReplay' hier' http: // reactivex.io/rxjs/class/es6/Observable.js ~ Observable.html', also sollte es definitiv Teil von Rxjs v5 sein. – user3743222
'flatMapLatest' sollte' switchMap' in RxJS 5 sein – subhaze