javascript之Promise:异步请求代码与结果处理分离
2016-09-05 12:10
441 查看
以下内容来自http://www.liaoxuefeng.com/wiki/001434446689867b27157e896e74d51a89c25cc8b43bdb3000/0014345008539155e93fc16046d4bb7854943814c4f9dc2000,抽出部分作为笔记
Promise有各种开源实现,在ES6中被统一规范,由浏览器直接支持。
1.最大的好处是在异步执行的流程中,把执行代码和处理结果的代码清晰地分离了:
举例:
2.另一个好处,Promise还可以组合异步任务。
试想一个页面聊天系统,我们需要从两个不同的URL分别获得用户的个人信息和好友列表,这两个任务是可以并行执行的,用
有些时候,多个异步任务是为了容错。比如,同时向两个URL读取用户的个人信息,只需要获得先返回的结果即可。这种情况下,用
由于
如果我们组合使用Promise,就可以把很多异步任务以并行和串行的方式组合起来执行。
Promise有各种开源实现,在ES6中被统一规范,由浏览器直接支持。
1.最大的好处是在异步执行的流程中,把执行代码和处理结果的代码清晰地分离了:
举例:
2.另一个好处,Promise还可以组合异步任务。
试想一个页面聊天系统,我们需要从两个不同的URL分别获得用户的个人信息和好友列表,这两个任务是可以并行执行的,用
Promise.all()实现如下:
var p1 = new Promise(function (resolve, reject) { setTimeout(resolve, 500, 'P1'); }); var p2 = new Promise(function (resolve, reject) { setTimeout(resolve, 600, 'P2'); }); // 同时执行p1和p2,并在它们都完成后执行then: Promise.all([p1, p2]).then(function (results) { console.log(results); // 获得一个Array: ['P1', 'P2'] });
有些时候,多个异步任务是为了容错。比如,同时向两个URL读取用户的个人信息,只需要获得先返回的结果即可。这种情况下,用
Promise.race()实现:
var p1 = new Promise(function (resolve, reject) { setTimeout(resolve, 500, 'P1'); }); var p2 = new Promise(function (resolve, reject) { setTimeout(resolve, 600, 'P2'); }); Promise.race([p1, p2]).then(function (result) { console.log(result); // 'P1' });
由于
p1执行较快,Promise的
then()将获得结果
'P1'。
p2仍在继续执行,但执行结果将被丢弃。
如果我们组合使用Promise,就可以把很多异步任务以并行和串行的方式组合起来执行。
相关文章推荐
- Promise分离异步执行代码和处理结果代码
- 原生javascript Ajax异步请求代码小例子
- javascript异步代码的回调地狱以及JQuery.deferred提供的promise解决方式
- 原生JavaScript实现ajax异步请求代码
- 用Promise解决多个异步Ajax请求导致的代码嵌套问题(完美解决方案)
- promise处理多个相互依赖的异步请求(实例讲解)
- ajax开发:Promise解决多个异步Ajax请求导致的代码嵌套问题
- 使用JavaScript 和 Ajax 处理异步请求
- 【Java】向一个页面发送post请求并获取其处理之后的结果与用javascript创建一个表单后提交的安全性
- 没有Promise的时候自己处理复合异步请求
- 微信小程序 es6-promise.js封装请求与处理异步进程
- 微信小程序 es6-promise.js封装请求 处理异步进程
- 代码实现AJAX异步回传(弹出javascript脚本)、异步更新的错误处理
- 用Promise解决多个异步Ajax请求导致的代码嵌套问题【转】
- ArcGIS API for JavaScript 4.2学习笔记[7] 鹰眼(缩略图的实现及异步处理、Promise、回调函数、监听的笔记)
- Android 中 Handler 引起的内存泄露 在Android常用编程中,Handler在进行异步操作并处理返回结果时经常被使用。其实这可能导致内存泄露,代码中哪里可能导致内存泄露,又是如何
- 代码实现AJAX异步回传(弹出javascript脚本)、异步更新的错误处理
- 使用JavaScript和Ajax发出异步请求
- 掌握 Ajax,第 2 部分: 使用 JavaScript 和 Ajax 发出异步请求
- 掌握 Ajax (2)-使用 JavaScript 和 Ajax 发出异步请求