如何在fetch中干净地处理预期的错误?

时间:2018-05-17 11:40:13

标签: javascript error-handling fetch-api

我需要通过fetch()调用查询一些数据,但我不确定请求是否成功,HTTP-wise:当服务器启动时,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()的正确方法吗?

1 个答案:

答案 0 :(得分:0)

是的,这看起来是正确的。我建议你使用这些功能。 它使抓取更紧凑,更容易阅读。



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);
}