Observable next 运算符用法混乱
Observable next operator usage confusion
我正在通过 codebase 进行 angularfire 身份验证,但我无法理解这段代码的工作原理。
基本上我对 observer.next()
的使用方式和上下文感到困惑。
我知道这个方法应该 return 一个可观察的,但是 .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);
});
}
});
提前致谢!!!
函数returns一个Observable,next和errors会通知订阅者处理回调。像电子邮件客户端一样工作,您可以打开多个客户端,当收到 "next" 电子邮件时,它们会处理消息。
只是对@tagunp 所说的一些补充,这里是 link to jsbin
它触发从观察者到订阅者的消息,其中的值已更改,next()
& error()
回调。
var source = Rx.Observable.create(observer => {
Rx.Observable.range(0,5).subscribe(
data => {
console.log(data)
if(data > 2) {
// conveys to the subscriber of source
// that values has changed
observer.next("greater than 2");
}
}
)
})
source.subscribe(
data => console.log(data)
)
Output:-
0
1
2
3
"greater than 2"
4
"greater than 2"
我正在通过 codebase 进行 angularfire 身份验证,但我无法理解这段代码的工作原理。
基本上我对 observer.next()
的使用方式和上下文感到困惑。
我知道这个方法应该 return 一个可观察的,但是 .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);
});
}
});
提前致谢!!!
函数returns一个Observable,next和errors会通知订阅者处理回调。像电子邮件客户端一样工作,您可以打开多个客户端,当收到 "next" 电子邮件时,它们会处理消息。
只是对@tagunp 所说的一些补充,这里是 link to jsbin
它触发从观察者到订阅者的消息,其中的值已更改,next()
& error()
回调。
var source = Rx.Observable.create(observer => {
Rx.Observable.range(0,5).subscribe(
data => {
console.log(data)
if(data > 2) {
// conveys to the subscriber of source
// that values has changed
observer.next("greater than 2");
}
}
)
})
source.subscribe(
data => console.log(data)
)
Output:-
0
1
2
3
"greater than 2"
4
"greater than 2"