【发布时间】:2016-11-23 18:13:06
【问题描述】:
我正在通过 codebase 进行 angularfire 身份验证,但我无法理解这段代码的工作原理。
基本上,我对observer.next() 的使用方式以及在何种情况下使用感到困惑。
我知道这个方法应该返回一个 observable,但是在它上面做 .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 发出一个事件。
标签: angular reactive-programming angularfire observable angularfire2