如何等待一个流(比如StreamA
)返回非空值,然后调用StreamB
订阅功能。我对StreamA
的价值并不特别感兴趣。反过来,我试图获取StreamB
的值,该值可能在StreamA返回非空值之前已更新,并且可能没有任何新事件。
我尝试了 pausable ,通过查看:RxJS: How can I do an "if" with Observables?,但遗憾的是无法让它工作。这是因为,没有导出的类pausable
,rxjs v 5.0.0-beta.6。
根据答案,我已经提出了多远。
导出类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();
}
希望,我能说清楚。即使我现在感到困惑。 :第
我是rxjs和反应式编程的新手。并且,任何帮助将不胜感激。
顺便说一句,谢谢你的到来。 :)
答案 0 :(得分:1)
我想plausible
你的意思是pausable
?我不确定你在这里想要实现的是什么(控制流程?)。但是,如果您想在streamA生成值之后使用streamB值,则可以使用flatMap
。
streamA.flatMapLatest(function (_){return streamB})
这应该随时streamA
发出streamB
之后发出的值。
如果你想要包括在那之前发出的最后一张B的值,你可以使用streamBB = streamB.publishReplay(1)
和
streamA.flatMapLatest(function (_){return streamBB})
尚未对其进行测试,如果有效,请及时通知我。