关于fetch

Fetch 作为浏览器提供的原生 AJAX 接口。还是值得我们去探究一下的。这里有一篇关于Fetch应用特别好的博文,所以,我啥也不说了👇
传统 Ajax 已死,Fetch 永生


你可能会说,我们用axios就好了,它也基于promiss。其实我也是,目前项目中都是用axios,还没有应用过Fetch。但是它们直接的区别还是应该了解一下的。发现一篇非常全面的好文,所以,我啥也不说了👇
Ajax,jQuery ajax,axios和fetch介绍、区别以及优缺点


有人吐槽Fetch:

function addUser(details) {
  return fetch('https://api.example.com/user', {
    mode: 'cors', //fetch 默认不启用 CORS
    method: 'POST',
    credentials: 'include', // fetch 默认情况下不会发送 cookie
    body: JSON.stringify(details), //JSON 必须先转换成字符串
    headers: {
      //必须设置 'Content-Type' 头部,指出实体的类型是 JSON,否则服务器会把它当做普通的字符串处理
      'Content-Type': 'application/json',
      'Accept': 'application/json',
      // 用于防御xsrf攻击的 X-XSRF-TOKEN 头部 必须手动添加
      'X-XSRF-TOKEN': getCookieValue('XSRF-TOKEN')
    }
  }).then(response => {
    return response.json().then(data => {
      // 只会在网络错误的情况下reject 错误状态码(比如404 500 )依然resove
      if (response.ok) {
        return data;
      } else {
        return Promise.reject({status: response.status, data});
      }
    });
  });
}

吐槽帖


个人觉得,Fetch作为原生API,纯粹是非常正确的。实际应用场景千差万别,你不能保证你默认增加的配置适应任何场景。我们只需要在实际项目做一些本土化的封装,这样所有配置均可见。即便我们用axios,我们也经常这么做。


官方API文档