在此内部函数中,我们执行异步处理, 然后,当我们准备就绪时,我们调用resolve(),如下所示:
var promise = new Promise((resolve, reject) => {
setTimeout(() => {
console.log("Async Work Complete");
resolve();
}, 1000);
});
有关具体代码:here firebase身份验证github项目,
getCurrentUser(){
return new Promise<any>((resolve, reject) => {
var user = firebase.auth().onAuthStateChanged(function(user){
if (user) {
resolve(user);
} else {
reject('No user logged in');
}
})
})
}
和here表示
对于rxjs 6.0.0,请使用:
import { from } from 'rxjs';
var observableFromPromise = from(promiseSrc);
我可以想象解决方案是
getCurrentUser() {
return from(firebase.auth().onAuthStateChanged(function (user) {
user.getIdToken().then(x => {
return x;
})
})
)
}
或
getCurrentUser() {
firebase.auth().onAuthStateChanged(function (user) {
return from(user.getIdToken());
})
}
我的问题是回调中from
表达式的等效第二代码段是什么?
答案 0 :(得分:2)
我不知道我是否完全理解您的问题,但是如果您尝试从用户令牌返回可观察到的流,则可能可以进行以下操作:
getCurrentUser(): Observable<any> {
return new Observable(observer => {
firebase.auth().onAuthStateChanged(user => {
user.getIdToken().then(token => {
observer.next(token);
}).catch(error => {
observer.error(error);
})
})
})
}
每当身份验证状态更改时,都会在流上发送一个新的用户令牌。 希望这会有所帮助。
答案 1 :(得分:0)
关于bindCallback:
bindCallback(firebase.auth().onAuthStateChanged)
.subscribe(console.log);