http.get (). pipe () - не удалось получить реальный объект ответа от сервера для регистрации - PullRequest
0 голосов
/ 04 декабря 2018

Вариант использования - сделать HTTP-вызов на сервер.Зарегистрируйте фактический ответ от сервера.Преобразовать объект ответа (преобразовать поля даты эпохи в javascript Date).Затем верните преобразованный объект.

Фрагмент кода -

/** 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;
  }

1 Ответ

0 голосов
/ 04 декабря 2018

Ваш метод convertResponse мутирует объекты в массиве (а затем возвращает мутированный объект).Вы делаете запись "не преобразованной" версии вашего массива, но к тому времени, когда вы нажимаете "расход" в инструментах разработчика, мутация уже произошла, и вы просматриваете, как выглядят объекты после произошла ваша мутация.

При развертывании объекта в Chrome вы можете увидеть это предупреждение, если вы наведете подсказку синего цвета "i" tooltip рядом срасширение.

full image

Измените метод convertResponse, чтобы вместо него возвращался новый объект.

  private convertResponse(user: IUser): IUser {
    return {
      ...user,
      createdDate = new Date(user.createdDate),
      modifiedDate = new Date(user.modifiedDate),
    }
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...