Promise对象

什么是promise?

Promise对象代表:了未来将要发生的事件,用来传递异步操作的消息

Promise对象的两个特点:

  • Promise对象的状态不受外界的影响,每个Promise对象代表一个异步操作,总共有三种状态:
  1. pending(等待) : 初始状态,不是成功或者失败的状态
  2. fulfilled(已完成) :  成功时的状态,意味着操作成功完成
  3. rejected(已拒绝) : 失败时的状态,意味着操作失败

总之,只有异步操作的结果,可以决定当前是哪一种状态,任何其他的操作都无法改变这个状态

  • Promise对象一旦状态改变,就不会再变,任何时候都可以得到这个结果。Promise对象状态改变只有两种情况,从“等待(pending)”转到“完成(fulfilled)”态或者“拒绝(rejected)”态,不能逆向转换,同时“完成”态和“拒绝”态不能相互转换。只要这两种情况发生,状态就凝固了,不会再变了,会一直保持这个结果。就算改变已经发生了,你再对 Promise 对象添加回调函数,也会立即得到这个结果。

Promise的优缺点:

  • 优点:Promise对象可以将异步操作以同步操作的流程表达出来,避免了层层嵌套的回调函数。而且,Promise对象提供统一的接口,使得控制异步操作更加容易
  • 缺点:首先Promise对象一旦新建就会立即执行,无法中途取消;其次,Promise对象如果不设置回调函数,其内部会抛出错误,不会反应到外部;最后,当Promise对象处于pending状态时,无法得知目前进展到哪个阶段,即使刚刚开始还是即将完成。

Promise创建:

要想创建一个Promise对象,可以使用new来调用Promise的构造器来进行实例化,如下代码:

var promise = new Promise(function(resolve, reject) {
    // 异步处理
    // 处理结束后、调用resolve 或 reject
});

分析以上代码,Promise 构造函数包含一个参数和一个带有 resolve(解析)和 reject(拒绝)两个参数的回调。在回调中执行一些操作(例如异步),如果一切都正常,则调用 resolve,否则调用 reject。

Promise对象方法:

  • Promise.then(onFulfilled,onRejected):Promise必须实现then方法(可以说,then就是promise的核心),而且then必须返回一个promise,同一个promise的then可以调用多次,并且回调的执行顺序跟它们被定义时的顺序一致.then方法接受两个参数,第一个参数是成功时的回调,在promise由“等待”态转换到“完成”态时调用,另一个是失败时的回调,在promise由“等待”态转换到“拒绝”态时调用。同时,then可以接受另一个promise传入,也接受一个“类then”的对象或方法,即thenable对象。
  • Promise.all([p1,p2,p3]), 该方法用于将多个Promise实例,包装成一个新的Promise实例(Promise.all 方法的参数不一定是数组,但是必须具有 iterator 接口,且返回的每个成员都是 Promise 实例)

       var p =promise.all([p1,p2,p3])的状态由p1,p2,p3决定,分成两种情况:

  1. 只有p1、p2、p3的状态都变成fulfilled,p的状态才会变成fulfilled,此时p1、p2、p3的返回值组成一个数组,传递给p的回调函数。
  2. 只要p1、p2、p3之中有一个被rejected,p的状态就变成rejected,此时第一个被reject的实例的返回值,会传递给p的回调函数。
  • Promise.race([p1,p2,p3]), 该方法同样是将多个 Promise 实例,包装成一个新的 Promise 实例。

var  p = Promise.race([p1,p2,p3]),只要p1、p2、p3之中有一个实例率先改变状态,p的状态就跟着改变。那个率先改变的Promise实例的返回值,就传递给p的返回值。

  • Promise.resolve(),该方法是将现有对象转为Promise对象。

如果 Promise.resolve 方法的参数,不是具有 then 方法的对象(又称 thenable 对象),则返回一个新的 Promise 对象,且它的状态为fulfilled;如果Promise.resolve方法的参数是一个Promise对象的实例,则会被原封不动地返回。

  • Promise.reject(),该方法返回一个状态为rejected的Promise对象

Promise.reject方法的参数reason,会被传递给实例的回调函数。

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值