Подтвердить что ты не робот

Angular Response.json() не зарегистрировано

Я вижу, что метод Response.json() используется много, и я сам его использую, но либо я что-то упустил, либо документация для класса Response некорректна.

Пример:

getCurrentTime() {
    return this._http.get('http://date.jsontest.com/')
        .map((res:Response) => res.json())
}

На Angular сайте https://angular.io/docs/ts/latest/api/http/index/Response-class.html я не вижу этот метод как член класса Response.

Если .json не является членом класса Response, может кто-то указать мне в направлении понимания того, как это работает.

Или, если документация неверна, кто-то скажет это.

Спасибо заранее.

4b9b3361

Ответ 1

Собственно, документация HTTP-клиента (Обработать объект ответа)  говорит:

Разбор для JSON

Это не Angular собственный дизайн. HTTP-клиент Angular следует спецификации Fetch для объекта ответа, возвращаемого функцией Fetch. Эта спецификация определяет метод json(), который анализирует тело ответа на объект JavaScript.

Итак, Angular2 реализует Fetch Specification, которая включает спецификацию для упомянутого Body mixin, Angular2 Response, включая метод .json().

Метод json(), при вызове, должен возвращать результат запуска тела потребления с помощью JSON.

Как вы видите в ссылке peeskillet, Angular2 реализует все указанные методы микширования Body, кроме formData().

Ответ 2

Я смотрю API Reference для Response, вы увидите, что Response extends Body. Если вы попытаетесь найти Body, вы не найдете его, что, вероятно, означает, что он не является общедоступным. Если вы посмотрите исходный код для тела, вы увидите код для json

/**
 * Attempts to return body as parsed `JSON` object, or raises an exception.
 */
json(): any {
  if (typeof this._body === 'string') {
    return JSON.parse(<string>this._body);
  }

  if (this._body instanceof ArrayBuffer) {
    return JSON.parse(this.text());
  }

  return this._body;
}

Сообщите мне, если вам нужно объяснение источника. Это выглядит довольно самоочевидным для меня, хотя.