如何等待一個流(例如,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