Javascript 如何编写一个异步/等待方法作为角度中的可观察方法?

Javascript 如何编写一个异步/等待方法作为角度中的可观察方法?,javascript,angular,typescript,promise,observable,Javascript,Angular,Typescript,Promise,Observable,我曾经做过async/await,刚刚学会了在Angular中使用Observable,因为这是Angular方式,所以我想在这里重构这个代码片段,使其成为一个Observable: async refreshToken() { const headers = this.authStorage.getRequestHeader(); const body = { refreshToken: this.authStorage.getStoredValue('refres

我曾经做过async/await,刚刚学会了在Angular中使用Observable,因为这是Angular方式,所以我想在这里重构这个代码片段,使其成为一个Observable:

async refreshToken() {
    const headers = this.authStorage.getRequestHeader();
    const body = {
      refreshToken: this.authStorage.getStoredValue('refreshToken'),
    };
    const newAccessToken = await this.http
      .post<any>(ApiURLStore.REFRESH_TOKEN_URL, body, { headers: headers })
      .toPromise();

    this.authStorage.setValueToStore('accessToken', newAccessToken);
  }
异步刷新令牌(){
const headers=this.authStorage.getRequestHeader();
常数体={
refreshToken:this.authStorage.getStoredValue('refreshToken'),
};
const newAccessToken=等待this.http
.post(apirlstore.REFRESH_TOKEN_URL,body,{headers:headers})
.toPromise();
this.authStorage.setValueToStore('accessToken',newAccessToken);
}
因此,基本上,我向后端发出post请求,并获取一个令牌,然后在authStorage中使用它

我试着作为一个可观察的对象来做这件事,到目前为止:

refreshToken(): Observable<any> {
    const headers = this.authStorage.getRequestHeader();
    const body = {
      refreshToken: this.authStorage.getStoredValue('refreshToken'),
    };
    return this.http
      .post<any>(ApiURLStore.REFRESH_TOKEN_URL, body, { headers: headers });

    this.authStorage.setValueToStore('accessToken', newAccessToken);
  }
refreshToken():可观察{
const headers=this.authStorage.getRequestHeader();
常数体={
refreshToken:this.authStorage.getStoredValue('refreshToken'),
};
返回此文件。http
.post(apirlstore.REFRESH_TOKEN_URL,body,{headers:headers});
this.authStorage.setValueToStore('accessToken',newAccessToken);
}
这没关系,但我不能这样调用我的authStorage。 我无法将其保存在变量中,因为可观察对象需要返回。。。 我也尝试过用管道和订阅,但没有机会


有什么提示吗?

您可以在操作员内部执行副作用逻辑:

返回this.http
.post(apirlstore.REFRESH_TOKEN_URL,body,{headers:headers})
.烟斗(
点击(newAccessToken=>this.authStorage.setValueToStore('accessToken',newAccessToken))
);

您可以在操作员内部执行副作用逻辑:

返回this.http
.post(apirlstore.REFRESH_TOKEN_URL,body,{headers:headers})
.烟斗(
点击(newAccessToken=>this.authStorage.setValueToStore('accessToken',newAccessToken))
);

创建新承诺并返还它创建新承诺并返还它