axios 和 fetch 區別對比


axios
axios({
  method: 'post',
  url: '/user/12345',
  data: {
    firstName: 'Fred',
    lastName: 'Flintstone'
  }
})
.then(function (response) {
  console.log(response);
})
.catch(function (error) {
  console.log(error);
});
axios 是一個基於Promise 用於瀏覽器和 nodejs 的 HTTP 客戶端,本質上也是對原生XHR的封裝,只不過它是Promise的實現版本,符合最新的ES規范,它本身具有以下特征:
1.從瀏覽器中創建 XMLHttpRequest
2.支持 Promise API
3.客戶端支持防止CSRF
4.提供了一些並發請求的接口(重要,方便了很多的操作)
5.從 node.js 創建 http 請求
6.攔截請求和響應
7.轉換請求和響應數據
8.取消請求
9.自動轉換JSON數據
fetch
fetch('http://example.com/movies.json')
  .then(function(response) {
    return response.json();
  })
  .then(function(myJson) {
    console.log(myJson);
  });
一、fetch優勢:
1.語法簡潔,更加語義化
2.基於標准 Promise 實現,支持 async/await
3.同構方便,使用 isomorphic-fetch
4.更加底層,提供的API豐富(request, response)
5.脫離了XHR,是ES規范里新的實現方式
二、fetch存在問題
1.fetch是一個低層次的API,你可以把它考慮成原生的XHR,所以使用起來並不是那么舒服,需要進行封裝。
2.fetch只對網絡請求報錯,對400,500都當做成功的請求,服務器返回 400,500 錯誤碼時並不會 reject,只有網絡錯誤這些導致請求不能完成時,fetch 才會被 reject。
3.fetch默認不會帶cookie,需要添加配置項: fetch(url, {credentials: 'include'})
4.fetch不支持abort,不支持超時控制,使用setTimeout及Promise.reject的實現的超時控制並不能阻止請求過程繼續在后台運行,造成了流量的浪費
5.fetch沒有辦法原生監測請求的進度,而XHR可以


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM