Promise系列05:Promise应用
来源:互联网 发布:怎么查飞卢的订阅数据 编辑:程序博客网 时间:2024/06/05 15:29
Ajax操作是典型的异步操作,传统上往往写成下面这样。
function search(term, onload, onerror) { var xhr, results, url; url = 'http://example.com/search?q=' + term; xhr = new XMLHttpRequest(); xhr.open('GET', url, true); xhr.onload = function (e) { if (this.status === 200) { results = JSON.parse(this.responseText); onload(results); } }; xhr.onerror = function (e) { onerror(e); }; xhr.send();}search("Hello World", console.log, console.error);
如果使用Promise对象,就可以写成下面这样。
function search(term) { var url = 'http://example.com/search?q=' + term; var xhr = new XMLHttpRequest(); var result; var p = new Promise(function (resolve, reject) { xhr.open('GET', url, true); xhr.onload = function (e) { if (this.status === 200) { result = JSON.parse(this.responseText); resolve(result); } }; xhr.onerror = function (e) { reject(e); }; xhr.send(); }); return p;}search("Hello World").then(console.log, console.error);
Promise对象的优点在于,让回调函数变成了规范的链式写法,程序流程可以看得很清楚。
它的一整套接口,可以实现许多强大的功能,比如为多个异步操作部署一个回调函数、为多个回调函数中抛出的错误统一指定处理方法等等。
而且,它还有一个好处:如果一个任务已经完成,再添加回调函数,该回调函数会立即执行。所以,你不用担心是否错过了某个事件或信号。
这种方法的缺点就是,编写和理解都相对比较难。
0 0
- Promise系列05:Promise应用
- Promise系列01:初识Promise
- Promise系列02:Promise创建
- Promise系列03:Promise状态
- promise
- Promise
- Promise
- Promise
- Promise
- Promise
- Promise
- promise
- promise
- promise
- promise
- Promise
- Promise
- promise
- MATLAB R2014a Builder JA总结
- Java 多线程 并发编程
- jquery——zTree, 完美好用的树插件
- 重定向的解释总结整理
- android 日期时间选择器
- Promise系列05:Promise应用
- 正则表达式
- Linux kernel的中断子系统之(二):IRQ Domain介绍
- ov9650摄像头驱动之——linux内核v4l2架构分析1
- solution Of 1107. Social Clusters (30)
- 【智力题】—— 猴子分桃
- 【汇编】将ASCII码表示的十进制数转换成二进制数
- 为什么在.html文件中嵌入php代码没效果
- iOS实现xml的post传递,返回xml数据进行解析