fetch()
возвращает обещание, которое (в случае успеха) разрешает объект Response
. Очень часто нужно позвонить Response.json()
, чтобы преобразовать тело ответа в объект JSON.Перечитать тело ответа из изображения JavaScript
Если тело ответа недействительно JSON, то отказ Response.json()
с ошибкой невозможен. Сообщение является чем-то вроде:
Unexpected token X in JSON at position 0
Это не очень полезно при диагностике проблемы; в идеале я хотел бы видеть содержимое с сервера (что часто является сообщением об ошибке).
Однако, похоже, что вы можете читать поток только по адресу Response.body
один раз (по крайней мере, в Chrome). (Есть даже флаг только для чтения Response.bodyUsed
.) Это уже произошло, когда Response.json()
пытается преобразовать тело в JSON, поэтому тело, кажется, потеряно навсегда в случае сбоя синтаксического анализа JSON.
Есть ли способ восстановить исходное тело ответа ... за исключением его ручного чтения (а затем преобразования в JSON), когда оригинал fetch
Promise разрешает?
Вместо этого вы можете вызвать 'response.text()', чтобы прочитать возвращаемые данные, даже если это недействительно JSON, и вы можете клонировать ответ, но в идеале ваш сервер должен ** всегда ** возвращать JSON, когда вы ожидаете JSON, даже ошибки должны быть возвращены как JSON. – adeneo