Promise

定义

  • Promise主要用于异步处理,用来解决传统的回调地狱问题。
  • 在实际项目中可以用来处理异步函数,以及多个异步操作的处理,在
    异步处理中定义异步方法(如ajax),在.then方法中处理结果,使得逻辑更清晰,更易于维护,而不是使用函数嵌套函数的方式。

  • 所谓Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果。

  • Promise是一个对象,从它可以获取异步操作的消息。
  • Promise 对象的状态不受外界影响。只有异步操作的结果,可以决定当前是哪一种状态

    Promise三种状态

  • pending:进行中
  • fulfilled :已经成功
  • rejected 已经失败

    Promise状态改变:

  • 从pending变为fulfilled

  • 从pending变为rejected。

这两种情况只要发生,状态就凝固了,不会再变了这时就称为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 有两个参数

  1. resolve将Promise对象的状态从“未完成”变为“成功”(即从Pending变为Resolved),在异步操作成功时调用,并将异步操作的结果,作为参数传递出去。

  2. reject将Promise对象的状态从“未完成”变为“失败”(即从Pending变为Rejected),在异步操作失败时调用,并将异步操作报出的错误,作为参数传递出去。

请我吃辣条吧~~
-------------本文结束感谢您的阅读-------------