【问题标题】:http toPromise return an objecthttp toPromise 返回一个对象
【发布时间】:2019-02-04 22:25:35
【问题描述】:

我有以下功能:

getUser(userId: string) : Observable<any> {
    var getUserURL = `/api/users/${userId}`,
        getUserStatus = this.getUserStatus();


    return this.http.get<any>(getUserURL).pipe(
      catchError(this.handleError('getUser - Get User failed', null))
    );
  }

这会将来自该 URL /api/users/${userId} 的 REST API 响应的数据返回到 toPromise

有什么方法可以返回包含来自 REST API + 本地数据(getUserStatus)的响应数据的对象,在这种情况下是布尔值。 谢谢

【问题讨论】:

  • 你能解释一下为什么你需要它是Promise&lt;T&gt;而不是Observable&lt;T&gt;吗?您打算如何使用响应?
  • 看起来问题是如何在订阅后将数据附加到Observable 并返回REST API + local data(getUserStatus)。类似stackoverflow.com/questions/40719237/…

标签: javascript angular typescript promise rxjs


【解决方案1】:

您的请求不会返回 Promise,除非它未包含在您的示例中。你有一个 Observable。

假设我正确理解了您的问题。如果您想返回 HTTP 响应 + 本地状态,您可以使用管道运算符执行以下操作:

服务

getUser(userId: string) : Observable<any> {
  const path = `/api/users/${userId}`
  const userStatus = this.getUserStatus();

  return this.http.get<any>(path)
    .pipe(
      map((response: any) => {
        return { response, userStatus };
      }),
      catchError(this.handleError('[USER]::getUser Failed', null))
    );
}

组件

this.getUser(1000).subscribe(({response, userStatus}) => { 
  // Handle response and status
  console.log('RESPONSE', response);
  console.log('USER_STATUS', userStatus);
});

【讨论】:

  • 太棒了@kim。如果 StackOverflow 上的解决方案是正确的,您可以使用复选标记将其标记为选择的答案。
【解决方案2】:

就像@mtputlz 说你返回一个 Observable。如果您想返回您的回复,在您的情况下是布尔值。然后我们可以将 obserable 转换为 Promise:

async getUser(userId: string) : any {
    var getUserURL = `/api/users/${userId}`,
        getUserStatus = this.getUserStatus();


    return await this.http.get<any>(getUserURL).pipe(
      catchError(this.handleError('getUser - Get User failed', null))
    ).toPromise();
  }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-24
    • 2015-03-24
    • 1970-01-01
    • 2015-06-06
    • 2015-06-03
    • 2014-05-27
    • 2014-05-22
    • 2017-03-06
    相关资源
    最近更新 更多