【问题标题】:http.get().pipe() - unable to get the actual response object from server for logginghttp.get().pipe() - 无法从服务器获取实际响应对象以进行日志记录
【发布时间】:2018-12-04 18:29:39
【问题描述】:

用例 - 对服务器进行 http get 调用。记录来自服务器的实际响应。转换响应对象(将纪元日期字段转换为 javascript 日期)。然后返回转换后的对象。

代码 sn-p -

/** GET users from the server */
  getUsers(): Observable<IUser[]> {
    this.logger.log(`GET on ${this.baseUrl}`);
    return this.http.get<IUser[]>(this.baseUrl).pipe(
      tap(users => this.logger.log(`fetched users - `, users)),
      map(users => {
        return users.map(user => this.convertResponse(user));
      }),
      catchError(handleError.bind({ logger: this.logger }))
    );
  }

目前我正在使用 tap() 来记录响应。然后使用 map() 转换响应对象。但是显示的日志消息是转换后的对象,而不是来自服务器的原始响应。

如何在转换之前捕获响应对象?

编辑 -

  private convertResponse(user: IUser): IUser {
    user.createdDate = new Date(user.createdDate);
    user.modifiedDate = new Date(user.modifiedDate);
    return user;
  }

【问题讨论】:

  • 请发convertResponse方法。
  • 添加了convertResponse方法

标签: angular rxjs


【解决方案1】:

您的convertResponse 方法改变数组中的对象(然后返回改变的对象)。您确实记录了数组的“未转换”版本,但是当您在开发人员工具中点击“expend”时,突变已经发生,您正在查看对象的外观就像你的突变发生之后。

在 Chrome 中展开对象时,如果将蓝色“i”工具提示 悬停在展开旁边,您会看到此警告。

更改您的 convertResponse 方法以改为返回一个新对象。

  private convertResponse(user: IUser): IUser {
    return {
      ...user,
      createdDate = new Date(user.createdDate),
      modifiedDate = new Date(user.modifiedDate),
    }
  }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-02
    • 2017-10-03
    • 2011-11-11
    • 2021-01-03
    • 1970-01-01
    • 2017-06-25
    • 1970-01-01
    相关资源
    最近更新 更多