【发布时间】:2019-03-18 14:09:44
【问题描述】:
当我将 promise 与 subscribe 和另一个异步任务混合在一起时,这对我来说变得很复杂。
这是我的身份验证服务:
getCurrentUserToken(){
return new Promise((resolve,reject)=>{
firebase.auth().currentUser.getIdToken(/* forceRefresh */ true).then(function(idToken) {
resolve(idToken)
}).catch(function(error) {
reject(error)
});
})
}
这是我的 HTTP 服务:
sendEmail(email) {
return this.authService.getCurrentUserToken().then(token => {
const httpOptions = {
headers: new HttpHeaders({
'Content-Type': 'application/json',
'Authorization': 'Basic server-Password',
})
};
let data = email
data['idToken'] = token
return this.http.post(this.apiServer + 'sendEmail', data, httpOptions)
})
}
这就是我在组件中调用sendEmail(email) 函数的方式:
Observable.fromPromise(this.httpService.sendEmail(element)).subscribe(
data3 => {
console.log(data3)
}, error => {
console.log(error)
}
))
我必须将 currentUserToken 传递给 API 以让 API 验证用户会话。尽管如此,getCurrentUserToken()sendEmail() 都在异步运行,所以我必须使用Promise 将Token 传递给sendEmail() 函数,并让sendEmail 函数调用API 发送电子邮件.
没有承诺,我可以像这样订阅http.post:
this.httpService.sendEmail(element).subscribe(
data3 => {
console.log(data3)
}, error => {
console.log(error)
}
))
不幸的是,当我将承诺添加到其中时,我搞砸了,console.log 正在返回:
Observable {_isScalar: false, source: Observable, operator: MapOperator}
请告知如何订阅位于Promise 内的http.post。
【问题讨论】:
标签: javascript angular rxjs firebase-authentication observable