我正在通過codebase進行angularfire認證,我無法理解這段代碼如何工作。可觀察到的下一個運營商使用混亂
基本上我很困惑如何使用observer.next()
以及在哪種情況下。
據我所知,這種方法應該返回一個可觀察的,但如何做.next()
它有幫助。
我也看過next()
here的文檔,它的別名爲takelast
。
我仍然不明白這是如何工作在這裏。
loginWithFacebook() {
return Observable.create(observer => {
if (this.platform.is('cordova')) {
Facebook.login(['public_profile', 'email']).then(facebookData => {
let provider = firebase.auth.FacebookAuthProvider.credential(facebookData.authResponse.accessToken);
firebase.auth().signInWithCredential(provider).then(firebaseData => {
this.af.database.list('users').update(firebaseData.uid, {
name: firebaseData.displayName,
email: firebaseData.email,
provider: 'facebook',
image: firebaseData.photoURL
});
observer.next();
});
}, error => {
observer.error(error);
});
} else {
this.af.auth.login({
provider: AuthProviders.Facebook,
method: AuthMethods.Popup
}).then((facebookData) => {
this.af.database.list('users').update(facebookData.auth.uid, {
name: facebookData.auth.displayName,
email: facebookData.auth.email,
provider: 'facebook',
image: facebookData.auth.photoURL
});
observer.next();
}).catch((error) => {
console.info("error", error);
observer.error(error);
});
}
});
在此先感謝!
.next()不在返回的Observable上調用。它在觀察者身上呼叫。總之,它使得創建的observable發出一個事件。 –