Я использую Fetch API для загрузки некоторых JSON. Поэтому я использую .json()
в потоке ответа, а также необязательный второй аргумент функции (onRejected
) в .then()
, который имеет только один аргумент - причина отклонения.Отклоненная выборка: доступ к тексту ответа
Если что-то пойдет не так (как ответ недействителен JSON), я хочу получить доступ к тексту необработанного ответа, чтобы иметь какой-то значимый журнал ошибок или для дальнейшей обработки неожиданного ответа.
Рассмотрим упрощенный фрагмент:
fetch('api.php')
.then(
response => { return response.json(); }
)
.then(
json => { /* useful fulfillment value, a JSON object */ },
reason => { /* string message only */ }
);
Если API отвечает что-то другое, чем действительный JSON, он будет отвергать со следующей причине:
SyntaxError: JSON.parse: unexpected character at line 1 column 1 of the JSON data
Хотя это совершенно ясно, сообщение об ошибке , ему не хватает дампа того, что на самом деле вызвало ошибку.
Я рассмотрел использование .text()
, а затем попытался самостоятельно разобрать JSON, но это несколько противоречит цели .json()
.
Есть ли разумный способ получить доступ к тексту ответа, если отклонение потока считается отклоненным?
Это был бы простой и безопасный способ обеспечения ответа на обработку, но для этого потребовалось бы проверить, действительно ли аргумент * был * JSON. Я мог бы сразу использовать '.text()'.Вопрос в том, есть ли способ получить доступ к ответу в обратном вызове отказа. – dakab
Как насчет try..catch, как указано выше? – cjds
Вы пробовали? Он по-прежнему вызывает функцию отклонения, вероятно, потому, что переназначение не происходит после того, как поток ответа был прочитан до завершения. – dakab