Как подождать один поток (скажем, StreamA
), чтобы вернуть ненулевое значение, а затем вызвать функцию подписки StreamB
. Меня не особо интересует ценность StreamA
. В свою очередь, я пытаюсь получить значение StreamB
, которое могло быть обновлено до того, как StreamA вернет ненулевое значение и может не иметь никаких новых событий.Дождитесь потока перед вызовом другого потока
Я попытался, pausable, посмотрев на это: RxJS: How can I do an "if" with Observables?, но, к сожалению, он не смог заставить его работать. Это связано с тем, что нет экспортированного класса pausable
, rxjs v 5.0.0-beta.6.
Вот как далеко я пришел с ответом.
export class AuthService { userModel: FirebaseListObservable = this.af.database.list (/users
); конструктор (частный аф: 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();
}
Надежда, я могу сделать себе ясно. Даже сейчас я запутался. :п.
Я новичок в rxjs и реактивном программировании. И любая помощь будет оценена.
И, кстати, спасибо, что остановились. :)
Я добавил код, чтобы сделать вас немного понятнее. (Надеюсь, это поможет). Кроме того, с приведенным выше кодом я получаю следующую ошибку в TS Compiler. 'Свойство 'publishReplay' не существует для типа 'FirebaseListObservable' .' –
ankitjain11
ну, вам нужно взглянуть на ваши типы. В 'flatMapLatest' вы увидите, что он является наблюдаемым, который возвращается. Поэтому проверьте, что ваш «FirebaseListObservable» действительно является наблюдаемым. Вы можете найти 'publishReplay' здесь' http: // reactivex.io/rxjs/class/es6/Observable.js ~ Observable.html', поэтому он определенно должен быть частью Rxjs v5. – user3743222
'flatMapLatest' должен быть' switchMap' в RxJS 5 – subhaze