- 1、本文档共19页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
ECMAScript 6 Promise对象
ECMAScript 6 Promise对象
1. Promise的含义
2. 基本⽤法
3. Promise .prototype .then()
4 . Promise .prototype .catch()
5. Promise .all()
6. Promise .race()
7 . Promise .resolve()
8. Promise .reject()
9. 两个有⽤的附加⽅法
10 . 应⽤
Promise 的含义
Promise是异步编程的⼀种解决⽅案,⽐传统的解决⽅案 回调函 和事件 更合
理和更强⼤。它由社区最早提出和实现,ES6将其写进了语⾔标准,统⼀了⽤法,原
⽣提供了Promise对象。
所谓Promise,简单说就是⼀个容器,⾥⾯保存着某个未来才会结束的事件 (通常是
⼀个异步操作)的结果。从语法上说,Promise是⼀个对象,从它可以获取异步操作的
消息。Promise提供统⼀的API ,各种异步操作都可以⽤同样的⽅法进⾏处理。
Promise对象有以下两个特点。
(1)对象的状态不受外界影响。Promise对象代表⼀个异步操作,有三种状
态:Pending (进⾏中)、Resolved (已完成,又称Fulfilled )和Rejected (已失
败)。只有异步操作的结果,可以决定当前是哪⼀种状态,任何其他操作都⽆法改变
这个状态。这也是Promise这个名字的由来,它的英语意思就是“承诺” ,表⽰其他⼿
段⽆法改变。
(2 )⼀旦状态改变,就不会再变,任何时候都可以得到这个结果。Promise对象的
状态改变,只有两种可能:从Pending变为Resolved和从Pending变
为Rejected。只要这两种情况发⽣,状态就凝固了,不会再变了,会⼀直保持这个
结果。就算改变已经发⽣了,你再对Promise对象添加回调函 ,也会⽴即得到这个
结果。这与事件 (Event )完全不同,事件的特点是,如果你错过了它,再去监听,是
得不到结果的。
有了Promise对象,就可以将异步操作以同步操作的流程表达出来,避免了层层嵌套
的回调函 。此外,Promise对象提供统⼀的接⼜,使得控制异步操作更加容易。
Promise也有⼀些缺点。⾸先,⽆法取消Promise,⼀旦新建它就会⽴即执⾏,⽆
法中途取消。其次,如果不设置回调函 ,Promise内部抛出的错误,不会反应到外
部。第三,当处于Pending状态时,⽆法得知⽬前进展到哪⼀个阶段 (刚刚开始还是
即将完成)。
如果某些事件不断地反复发⽣,⼀般来说,使⽤stream模式是⽐部署Promise更好的
选择。
基本⽤法
ES6规定,Promise对象是⼀个构造函 ,⽤来⽣成Promise实例。
下⾯代码创造了⼀个Promise实例。
var promise = new Promise(function(resolve, reject) {
// ... some code
if (/* 异步操作成功 */){
resolve(value);
else {
reject(error);
);
Promise构造函 接受⼀个函 作为参 ,该函 的两个参 分别是resolve和
reject。它们是两个函 ,由JavaScript引擎提供,不⽤⾃⼰部署。
resolve函 的作⽤是,将Promise对象的状态从“未完成”变为“成功” (即从Pending
变为Resolved ),在异步操作成功时调⽤,并将异步操作的结果,作为参 传递出
去;reject函 的作⽤是,将Promise对象的状态从“未完成”变为“失败” (即从
Pending变为Rejected ),在异步操作失败时调⽤,并将异步操作报出的错误,作为参
传递出去。
Promise实例⽣成以后,可以⽤then⽅法分别指定Resolved状态和Reject状态的回
调函 。
promise.then(function(value) {
// success
, function(error) {
// failure
);
then⽅法可以接受两个回调函 作为参 。第⼀个回调函 是Promis
文档评论(0)