定义
- Promise主要用于异步处理,用来解决传统的回调地狱问题。
在实际项目中可以用来处理异步函数,以及多个异步操作的处理,在
异步处理中定义异步方法(如ajax),在.then方法中处理结果,使得逻辑更清晰,更易于维护,而不是使用函数嵌套函数的方式。所谓Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果。
- Promise是一个对象,从它可以获取异步操作的消息。
Promise 对象的状态不受外界影响。只有异步操作的结果,可以决定当前是哪一种状态
Promise三种状态
这两种情况只要发生,状态就凝固了,不会再变了这时就称为
resolved
(已定型);
Promise的优点
有了Promise对象,就可以将异步操作以同步操作的流程表达出来,避免了层层嵌套的回调函数。此外,Promise对象提供统一的接口,使得控制异步操作更加容易。
Promise的缺点
- 无法取消Promise,一旦新建它就会立即执行,无法中途取消。
- 如果不设置回调函数,Promise内部抛出的错误,不会反应到外部。
- 当处于Pending状态时,无法得知目前进展到哪一个阶段(刚刚开始还是即将完成)。
Promise的用法
Promise对象是一个构造函数,用来生成Promise实例。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 let p = new Promise(function(resolve,reject){
setTimeout(function(){
a = 20;
if(a === 20){
resolve(a);
}else{
reject('错误');
}
},0);
});
Promise 实例生成以后,可以用then 方法分别指定resolved状态和rejected状态的回调函数
p.then(function(a){
alert(a);
},function(){
});
Promise 有两个参数
resolve
将Promise对象的状态从“未完成”变为“成功”(即从Pending变为Resolved),在异步操作成功时调用,并将异步操作的结果,作为参数传递出去。reject
将Promise对象的状态从“未完成”变为“失败”(即从Pending变为Rejected),在异步操作失败时调用,并将异步操作报出的错误,作为参数传递出去。