【问题标题】:How to write an async/await method as an Observable in Angular?如何在 Angular 中将 async/await 方法编写为 Observable?
【发布时间】:2021-07-04 18:02:27
【问题描述】:

我曾经做 async/await 并且刚刚学会在 Angular 中使用 Observable,因为它是 Angular 的方式,所以我想在这里重构这段代码 sn-p 使它成为一个 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);
  }

所以基本上我正在向我的后端发出一个 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 需要返回... 我也尝试过使用管道和订阅,但没有机会。

有什么建议吗?

【问题讨论】:

  • 创建一个新的 Promise 并返回它

标签: javascript angular typescript promise observable


【解决方案1】:

您可以在 tap 运算符中执行副作用逻辑:

return this.http
    .post<any>(ApiURLStore.REFRESH_TOKEN_URL, body, { headers: headers })
    .pipe(
        tap(newAccessToken => this.authStorage.setValueToStore('accessToken', newAccessToken))
    );

【讨论】:

    猜你喜欢
    • 2019-05-08
    • 1970-01-01
    • 2018-02-05
    • 2013-02-22
    • 2022-12-07
    • 2012-10-25
    • 1970-01-01
    • 1970-01-01
    • 2018-06-13
    相关资源
    最近更新 更多