如何在 Angular 中将 async/await 方法编写为 Observable?
How to write an async/await method as an Observable in Angular?
我曾经做过 async/await 并且刚刚学会了在 Angular 中使用 Observable 因为它是 Angular 方式,所以我想在这里重构这个代码片段,使它成为一个可观察:
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);
}
所以基本上我正在向我的后端发出 post 请求并取回令牌,然后在 authStorage 中使用它。
我试着把它作为一个 Observable 来做,到目前为止得到了这个:
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);
}
这没问题并且可以工作,但我不能以这种方式调用我的 authStorage。
我无法将它保存在变量中,因为 Observable 需要有一个 return...
我也尝试过管道和订阅,但没有机会。
有什么建议吗?
您可以在 tap
运算符中执行副作用逻辑:
return this.http
.post<any>(ApiURLStore.REFRESH_TOKEN_URL, body, { headers: headers })
.pipe(
tap(newAccessToken => this.authStorage.setValueToStore('accessToken', newAccessToken))
);
我曾经做过 async/await 并且刚刚学会了在 Angular 中使用 Observable 因为它是 Angular 方式,所以我想在这里重构这个代码片段,使它成为一个可观察:
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);
}
所以基本上我正在向我的后端发出 post 请求并取回令牌,然后在 authStorage 中使用它。
我试着把它作为一个 Observable 来做,到目前为止得到了这个:
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);
}
这没问题并且可以工作,但我不能以这种方式调用我的 authStorage。 我无法将它保存在变量中,因为 Observable 需要有一个 return... 我也尝试过管道和订阅,但没有机会。
有什么建议吗?
您可以在 tap
运算符中执行副作用逻辑:
return this.http
.post<any>(ApiURLStore.REFRESH_TOKEN_URL, body, { headers: headers })
.pipe(
tap(newAccessToken => this.authStorage.setValueToStore('accessToken', newAccessToken))
);