Fetch
来源:互联网 发布:首席网络运营官 编辑:程序博客网 时间:2024/06/08 23:44
Fetch
之前所写的Ajax都是利用XMLHttpRequest实现的,可是也不难发现XMLHttpRequest并不是专为Ajax实现的,并且它也没有关注分离的原则,配置和调用方式比较混乱,不太友好,而基于Promise的Fetch就比较友好
相关文档:https://developer.mozilla.org/zh-CN/docs/Web/API/GlobalFetch/fetch
简单介绍
fetch(input[, init]);
- input,定义要获取的资源,可以是URL或Request对象
- init,可选择的参数,配置项对象,包括method、headers、body等信息
- 返回值:一个promise对象,resolve时回传Response对象
示例如下:
var myImage = document.querySelector('img');var myRequest = new Request('one.jpg'); //非URL,而是一个Request对象fetch(myRequest).then(function(response) { return response.blob();}).then(function(response) { var objectURL = URL.createObjectURL(response); myImage.src = objectURL;});
含有第二个参数的示例:
var init = { method: 'GET', headers: myHeaders, mode: 'cors', cache: 'default' };fetch(URL, init).then(function(response) { ...})
使用
发送JSON请求
fetch(url).then(function(response) { return response.json();}).then(function(data) { console.log(data);}).catch(function(e) { console.log("err",err); //错误处理});
可以使用ES6的箭头函数进行简化:
fetch(url).then(response => response.json()).then( data => console.log(data)).catch(err => { console.log(err); })
Fetch除了语法简洁,语义化明显的优点之外,还支持async/await
async/await
async/await适用于执行一个耗时操作或者是异步操作,使用async执行所写的函数代码,而在函数内部使用await关键字来达到异步的目的
function sleep(time) { return new Promise(function(resolve, reject) { setTimeout(function() { resolve(); }, time); });}let test = async function () { console.log('start'); await sleep(3000); //sleep 为一个执行需要耗费 3s 的函数 console.log('end');};test();
运行结果:
Fetch与async/await配合使用
let test = async function () { try { let response = await fetch(url); let data = response.json(); } catch { .... } };
在前面的例子中,await
后面跟着 Promise 对象,表示等待resolve才会继续向下执行,如果 Promise 被 reject()
或抛出异常则会被外面的 try...catch
捕获
总结
目前而言,刚接触Fetch,但是确实很喜欢它的简洁,和async/await配合使用感觉还不错
阅读全文
0 0
- FETCH
- Fetch
- FETCH
- Fetch
- fetch
- fetch
- fetch
- Fetch
- fetch
- Fetch()
- Fetch
- Fetch例子
- fetch.....into ..............
- 【转载】FETCH
- hibernate fetch
- Fetch next
- 关于fetch
- HQL fetch
- GDOI2017小结
- jzoj1154【GDOI2003】购物(树形dp)
- VM虚拟机下安装Centos7.0图文教程
- 在建DB块时候应该注意的问题
- OpenCV自学笔记16. 卡尔曼滤波器小例子
- Fetch
- [bzoj4870] [Shoi2017]组合数问题
- Linux IO模式及 select、poll、epoll详解
- (34)内部类
- asp.net 用户登录 验证码
- python中的glob包
- TypeScript解构
- 剑指Offer----矩形覆盖
- Vue2.0项目开发流程—通俗易懂