私はcodebaseの角度ファイア認証を行っていましたが、このコードの動作を理解できませんでした。観測可能な次の演算子の使用方法の混乱
基本的には、どのようにobserver.next()
が使用されているのか混乱しています。
私は、このメソッドは観察可能なものを返すはずだが、それで.next()
を実行するとどのように役立つのか理解しています。
また、takelast
の別名next()
hereのドキュメントも見ています。
私はまだこれがどのように機能しているのかまだ分かりません。
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で呼び出されません。それはオブザーバーに呼び出されます。つまり、作成されたオブザーバブルがイベントを発生させます。 –