fetch
必然要替换XMLHttpRequest
,因此是时候尝试 fetch 了;- 本封装仅针对npm引入;
- 本封装依赖 es6-promise 和 whatwg-fetch,分别对
promise
和fetch
进行兼容性处理;- 还有一种兼容性处理是依赖 es6-promise 和isomorphic-fetch ,可是看它的源码就会发现,
isomorphic-fetch
只不过是引用了whatwg-fetch
,并无作二次开发,
isomorphic-fetch
只是将fetch添加为全局,以便其API在客户端和服务器之间保持一致,因此不必。
fetch
的请求方式同 $ajax
和 axios
都不太同样,而且它自己的get请求同其余请求对数据的处理和herder也不太相同,因此为了统一请求行为,方便请求过程,将请求过程进行封装;fetch
请求的结果均返回到.then()中,可是平时的习惯是是在 .then()
中处理正确结果,.catch()
中处理错误,因此对请求结果进行统一处理;fetch
自己没有 请求超时 这个概念,因此经过 Promise.race
来处理,它的做用是多个promise同时运行,返回的结果以最快返回结果的那个promise的值为准。Fetch for browser.javascript
$ npm isntall reco-fetch
<script src="/node_modules/reco-fetch/dist/recoFetch.min.js"></script>
import recoFetch from 'reco-fetch'
In addition to the parameters given below, please combine other parameters MDN.html
/** * @param {String, must} url API URL * @param {String, must} options Parameter objects, including: * method {String, optional} Request method, default 'get' * headers {Object, optional} Set request header * params {Object, optional} url parameters * body {Object, optional} request body * timeout {Number, optional} Request timeout * type {String, optional} When 'post' requests, you can set: 'json', 'formData' */ const options = { method: 'post', headers: {}, timeout: 1000, body: { id: 1, value: 2 } } recoFetch(url, options). then(res => { console.log(res) }).catch(err => { console.log(err) })
const options = { method: 'get', params: { key: 1, value: 2 } } recoFetch(url, options). then(res => { console.log(res) }).catch(err => { console.log(err) })
const options = { method: 'post', body: { key: 1, value: 2 }, type: 'json' } recoFetch(url, options). then(res => { console.log(res) }).catch(err => { console.log(err) })
POST formDatajava
const options = { method: 'post', body: { key: 1, value: 2 }, type: 'formData' } // or const form = document.querySelector('form') const options = { method: 'post', body: form } recoFetch(url, options). then(res => { console.log(res) }).catch(err => { console.log(err) })
const options = { method: 'put', body: { key: 1, value: 2 }, type: 'json' } // or const options = { method: 'put', body: JSON.stringify({ key: 1, value: 2 }) } recoFetch(url, options). then(res => { console.log(res) }).catch(err => { console.log(err) })
const options = { method: 'delete', params: { key: 1, value: 2 } } recoFetch(url, options). then(res => { console.log(res) }).catch(err => { console.log(err) })
const fileField = document.querySelector("input[type='file']") const options = { method: 'post', body: { file: fileField.files[0] }, type: 'formData' } // or const formData = new FormData() const fileField = document.querySelector("input[type='file']") formData.append('file', fileField.files[0]) const options = { method: 'post', body: formData } recoFetch(url, options). then(res => { console.log(res) }).catch(err => { console.log(err) })
MITnode
若是以为还能够,欢迎给个 Starios
我的博客:午后南杂git