Как правильно обработать ожидаемую ошибку при получении? - PullRequest
0 голосов
/ 17 мая 2018

Мне нужно запросить некоторые данные с помощью вызова fetch(), но я никогда не уверен, будет ли запрос успешным, с точки зрения HTTP: когда сервер работает, URL может (законно) попасть на несуществующую страницу.

Я хотел бы аккуратно разобраться с делом, и мой текущий подход заключается в том, чтобы вызвать исключение:

// the URL is just an example, I did not have anything CORS-enabled (and unavailable) handy, thus the no-cors mode
fetch(`https://cdnjs.com/libraries/sdfsdfsfsdfsdfsdfdf`, {
    mode: 'no-cors'
  })
  .then(r => {
    if (!r.ok) {
      console.log("page does not exist")
      throw Error();
    }
    // if the page exists, it will return JSON data
    return r.json();
  })
  .then(r => {
    console.log(r)
    // things with the JSON happen here
  })
  .catch(err => null)

Я надеялся просто return после Page does not exist, но (пустой) возврат будет затем пойман следующим then().

Это правильный способ выхода из fetch(), когда запрошенный URL недоступен?

1 Ответ

0 голосов
/ 17 мая 2018

Да, это выглядит правильно. Я бы порекомендовал использовать функции для вашей жизни. Это делает выборку более компактной и удобной для чтения.

const url = 'some url';
fetch(url)
  .then(handleErrors)
  .then(parseJSON)
  .then(update)
  .catch(displayErrors);
  
function handleErrors(res){
  if(!res.ok){
    throw Error(`${res.status}: Couldn't load URL.`);
  }
  return res;
}

function parseJSON (res){
  return res.json().then(function(parsedData){
    return parsedData.results[0];
  })
}

function update (){
    //do something with the data
}

function displayErrors(err){
  console.log(err);
}
...