Javascript .then()从未在Observable.toPromise()上调用
我尝试使用angularfire2身份验证库中的令牌对后端调用进行身份验证。我订阅authState以获取用户令牌,并将其作为请求选项添加到http请求中 如果我在chrome调试器中设置断点,它会成功执行getAuthOptions()中的返回行,但在此之后.getAuthOptions().toPromise()应用程序既不会调用.then()函数,也不会调用.catch()函数 可观察到的用法是否存在错误?我还有别的办法可以尝试吗Javascript .then()从未在Observable.toPromise()上调用,javascript,angular,typescript,rxjs,Javascript,Angular,Typescript,Rxjs,我尝试使用angularfire2身份验证库中的令牌对后端调用进行身份验证。我订阅authState以获取用户令牌,并将其作为请求选项添加到http请求中 如果我在chrome调试器中设置断点,它会成功执行getAuthOptions()中的返回行,但在此之后.getAuthOptions().toPromise()应用程序既不会调用.then()函数,也不会调用.catch()函数 可观察到的用法是否存在错误?我还有别的办法可以尝试吗 getPoints(): Promise<Obj
getPoints(): Promise<Object[]> {
return this.getAuthOptions().toPromise()
.then(options => this.http.get(this.baseUrl, options).toPromise())
.then(_ => _.json().data)
.catch(console.log);
}
getPointsFor(isin: String): Promise<Object> {
return this.getAuthOptions().toPromise()
.then(options => this.http.get(this.baseUrl + isin, options).toPromise())
.then(_ => _.json().data[0])
.catch(console.log);
}
private getAuthOptions(): Observable<RequestOptions> {
return this.afAuth.authState.map(res => {
if (res && res.uid) {
const token = res.getIdToken(true);
return new RequestOptions({
headers: new Headers({
Auth: `${token}`
})
});
} else {
return new RequestOptions();
}
});
}
getPoints():承诺{
返回此.getAuthOptions().toPromise())
.then(options=>this.http.get(this.baseUrl,options.toPromise())
.然后(=>json().data)
.catch(console.log);
}
getPointsFor(isin:String):承诺{
返回此.getAuthOptions().toPromise())
.then(options=>this.http.get(this.baseUrl+isin,options).toPromise())
.然后(=>json().data[0])
.catch(console.log);
}
私有getAuthOptions():可观察{
返回这个.afAuth.authState.map(res=>{
if(res&&res.uid){
const token=res.getIdToken(true);
返回新的请求选项({
标题:新标题({
身份验证:`${token}`
})
});
}否则{
返回新的RequestOptions();
}
});
}
当可观察到的内容完成或出现错误时,toPromise
操作符返回的承诺将得到解决。AngularFire2authState
observable未完成,因此除非发生错误,否则承诺将无法解决
您可以使用take
操作符组成一个可观察对象,该对象接受第一个发出的身份验证状态,然后完成:
导入“rxjs/add/operator/take”;
私有getAuthOptions():可观察{
返回this.afAuth.authState
.采取(1)
.map(res=>{
if(res&&res.uid){
const token=res.getIdToken(true);
返回新的请求选项({
标题:新标题({
身份验证:`${token}`
})
});
}否则{
返回新的RequestOptions();
}
});
}