如何等待一个流(例如,StreamA
)返回非空值,然后调用StreamB
订阅功能。我对StreamA
的价值并不特别感兴趣。反过来,我试图获得StreamB
的值,它可能在StreamA返回非空值之前更新过,并且可能没有任何新事件。在调用另一个流之前等待流
我试过,可运用,通过看这个: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
); 构造(私人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();
}
希望,我可以让自己清楚。即使我现在感到困惑。 :P。
我是rxjs和反应式编程的新手。并且,任何帮助将不胜感激。
而且,顺便说一句,谢谢你停下来。 :)
我已经添加了代码,使事情对你更清楚一点。 (希望有所帮助)。另外,通过上面的代码,我在TS Compiler中看到以下错误。 '属性'publishReplay'在'FirebaseListObservable'上不存在'。' –
ankitjain11
好吧,你需要看看你的类型。在'flatMapLatest'中,你会发现它是一个返回的可观察对象。因此请检查您的FirebaseListObservable是否确实是可观察的。你可以在这里找到'publishReplay''http:// reactivex.io/rxjs/class/es6/Observable.js〜Observable.html',所以它肯定应该是Rxjs v5的一部分。 – user3743222
'flatMapLatest'应该是RxJS 5中的'switchMap' – subhaze