Javascript .then()从未在Observable.toPromise()上调用

Javascript .then()从未在Observable.toPromise()上调用,javascript,angular,typescript,rxjs,Javascript,Angular,Typescript,Rxjs,我尝试使用angularfire2身份验证库中的令牌对后端调用进行身份验证。我订阅authState以获取用户令牌,并将其作为请求选项添加到http请求中 如果我在chrome调试器中设置断点,它会成功执行getAuthOptions()中的返回行,但在此之后.getAuthOptions().toPromise()应用程序既不会调用.then()函数,也不会调用.catch()函数 可观察到的用法是否存在错误?我还有别的办法可以尝试吗 getPoints(): Promise<Obj

我尝试使用angularfire2身份验证库中的令牌对后端调用进行身份验证。我订阅authState以获取用户令牌,并将其作为请求选项添加到http请求中

如果我在chrome调试器中设置断点,它会成功执行getAuthOptions()中的返回行,但在此之后.getAuthOptions().toPromise()应用程序既不会调用.then()函数,也不会调用.catch()函数

可观察到的用法是否存在错误?我还有别的办法可以尝试吗

  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
操作符返回的承诺将得到解决。AngularFire2
authState
observable未完成,因此除非发生错误,否则承诺将无法解决

您可以使用
take
操作符组成一个可观察对象,该对象接受第一个发出的身份验证状态,然后完成:

导入“rxjs/add/operator/take”;
私有getAuthOptions():可观察{
返回this.afAuth.authState
.采取(1)
.map(res=>{
if(res&&res.uid){
const token=res.getIdToken(true);
返回新的请求选项({
标题:新标题({
身份验证:`${token}`
})
});
}否则{
返回新的RequestOptions();
}
});
}