我需要通过fetch()调用查询一些数据,但是我不确定HTTP是否会成功执行该请求:在服务器启动时,URL可能(合法)到达一个不存在的页面。

我想彻底处理此案,而我目前的做法是提出一个异常(exception):

// 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()捕获。

当请求的URL不可用时,这是退出fetch()的正确方法吗?

最佳答案

是的,这看起来不错。我建议您在那时使用函数。
它使提取更为紧凑,更易于阅读。

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

关于javascript - 如何彻底处理提取中的预期错误?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50390550/

10-09 23:26