Promise系列05:Promise应用
2016-06-15 17:06
211 查看
Ajax操作是典型的异步操作,传统上往往写成下面这样。
如果使用Promise对象,就可以写成下面这样。
Promise对象的优点在于,让回调函数变成了规范的链式写法,程序流程可以看得很清楚。
它的一整套接口,可以实现许多强大的功能,比如为多个异步操作部署一个回调函数、为多个回调函数中抛出的错误统一指定处理方法等等。
而且,它还有一个好处:如果一个任务已经完成,再添加回调函数,该回调函数会立即执行。所以,你不用担心是否错过了某个事件或信号。
这种方法的缺点就是,编写和理解都相对比较难。
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对象的优点在于,让回调函数变成了规范的链式写法,程序流程可以看得很清楚。
它的一整套接口,可以实现许多强大的功能,比如为多个异步操作部署一个回调函数、为多个回调函数中抛出的错误统一指定处理方法等等。
而且,它还有一个好处:如果一个任务已经完成,再添加回调函数,该回调函数会立即执行。所以,你不用担心是否错过了某个事件或信号。
这种方法的缺点就是,编写和理解都相对比较难。
相关文章推荐
- 使用Promise解决多层异步调用的简单学习心得
- Jquery promise实现一张一张加载图片
- jQuery Deferred和Promise创建响应式应用程序详细介绍
- jQuery中的Deferred和promise 的区别
- jQuery的promise与deferred对象在异步回调中的作用
- 深入解析jQuery中Deferred的deferred.promise()方法
- javascript下使用Promise封装FileReader
- AngularJS中处理多个promise的方式
- javascript Promise简单学习使用方法小结
- JavaScript编程中的Promise使用大全
- JavaScript Promise启示录
- 异步JavaScript编程中的Promise使用方法
- javascript异步编程代码书写规范Promise学习笔记
- 详解JavaScript异步编程中jQuery的promise对象的作用
- NodeJS的Promise的用法解析
- 理解JavaScript中Promise的使用
- JavaScript异步编程Promise模式的6个特性
- JavaScript Promise 用法
- JavaScript中的Promise使用详解
- NodeJS中利用Promise来封装异步函数