Я вижу, что метод 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, может кто-то указать мне в направлении понимания того, как это работает.
Или, если документация неверна, кто-то скажет это.
Спасибо заранее.
Ответ 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;
}
Сообщите мне, если вам нужно объяснение источника. Это выглядит довольно самоочевидным для меня, хотя.