Я делаю запросы с использованием whatwg-fetch, и я пытаюсь проверить response.status === 0
в случае, если response.ok
является ложным, чтобы узнать, находится ли сервер в настоящее время в автономном режиме и уведомляет пользователей соответственно.whatwg-fetch response.ok === true, даже если сервер находится в автономном режиме
Проблема в том, что response.status
всегда 200, а response.ok
всегда верен, когда сервер отключен.
const interpretJsonResponse = (response, callback):object => {
const responseClone = response.clone();
if (response.ok) {
response.json().then((json) => callback(null, respondJson(json))).catch(callback);
} else {
// Response is not ok. Callback with a generic error to show to the user
// and log the error for detailed info
if (response.status === 0) {
// Backend server is not up
callback('Backend server is not responding. Please retry later!');
} else {
callback(`Error in request: ${response.statusText}`);
}
}
// Return a clone to allow usage of .json() again if necessary
return responseClone;
};
Я также получаю ошибку разбора JSON, так как ответ пуст, учитывая отсутствие серверов для ответа. Что я/я могу потерять? Объект
Пример ответа:
"url":"http://localhost:8000/client_v1/auth/",
"status":200,
"statusText":"OK",
"headers": {}
"ok":true,
"body":{
"_readableState":{
"highWaterMark":16384,
"buffer":[],
"length":0,
"pipes":null,
"pipesCount":0,
"flowing":null,
"ended":false,
"endEmitted":false,
"reading":false,
"sync":false,
"needReadable":true,
"emittedReadable":false,
"readableListening":false,
"objectMode":false,
"defaultEncoding":"utf8",
"ranOut":false,
"awaitDrain":0,
"readingMore":false,
"decoder":null,
"encoding":null
},
"readable":true,
"_events":{},
"_writableState":{
"highWaterMark":16384,
"objectMode":false,
"needDrain":false,
"ending":false,
"ended":false,
"finished":false,
"decodeStrings":true,
"defaultEncoding":"utf8",
"length":0,
"writing":false,
"corked":0,
"sync":true,
"bufferProcessing":false,
"writecb":null,
"writelen":0,
"buffer":[
],
"pendingcb":0,
"prefinished":false,
"errorEmitted":false
},
"writable":true,
"allowHalfOpen":true,
"_transformState":{
"needTransform":false,
"transforming":false,
"writecb":null,
"writechunk":null
}
},
"bodyUsed":false,
"size":0,
"timeout":0,
"_raw":[],
"_abort":false
EDIT: Добавлена полная функция Edit # 2: Добавлен пример WHATWG-выборки объекта Response
Что такое заявка на выборку? Обычно, когда обещание выборки разрешено, будет передана 2 функции: один - обработчик успеха, а другой - обработчик ошибок. Если сервер находится в автономном режиме, то обработчик успеха («interpJsonResponse») никогда не будет вызван. Вызывается только обработчик ошибок и передается с объектом ошибки. – shaochuancs
Хотя я полностью согласен, 'interpJsonResponse' там, где он терпит неудачу, особенно на бит' response.json() ', где он пытается JSON.parse (undefined). –