Promise概述

Promise的概述

Promise 是异步编程的一种解决方案

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

Promise 提供统一的 API,各种异步操作都可以用同样的方法进行处理

原理:

1.对象的状态不受外界影响

2.有三种状态: pending (进行中)、fulfilled (已成功)和rejected (已失败)

3.一旦状态改变,就不会再变,任何时候都可以得到这个结果

4.Promise对象的状态改变,只有两种可能:从pending变 为fulfilled和从pending变为rejected. 

Promise 创建

要想创建一个 promise 对象、可以使用 new 来调用 Promise 的构造器来进行实例化。

下面是创建 promise 的三个方法:

1.

2.Promise.resolve(data) : 快速构建一个 fulfilled 状态的 promise 

3.Promise.reject(data) : 快速构建一个 rejected 状态的 promise

Promise#then 方法的特点

 then : 
                     1. 处理 承诺 已完成的 业务
                     2. 更改 返回的 新的 promise 对象的状态
             
               then 方法会返回一个 新的 promise 对象
              
                a) then 方法的回调函数如果能被执行, 新的 promise 对象 状态由 回调函数 确定
                      i)  如果回调函数产生异常, 则返回 rejected 状态的 promise 
                      ii) 如果回调函数 没有 return ,则 返回 fulfilled 状态,并将 undefined 作为参数传给新的promise
                      iii) 如果回调函数 return 普通数据、则将 普通数据 作为 resolve 的 参数传给新的 promise
                      iv) 如果回调函数 return 一个 promise 对象,则then 返回的新的promise 对象状态和 return 的promise对象状态完全一致
              
                b) then 方法的回调函数如果不能执行,新的 promise 对象 和 调用 then 方法的 promise状态 完全一致

Promise 链式调用

Promise.prototype.then 方法返回的是一个新的 Promise 对象,因此可以采用链式写法

上面的代码使用 then 方法,依次指定了两个回调函数。第一个回调函数完成以后,会将返回结果作为参数,传入第二个回调函数。

如果前一个回调函数返回的是Promise对象,这时后一个回调函数就会等待该Promise对象有了运行结果,才会进一步调用。

这种设计使得嵌套的异步操作,可以被很容易得改写,从回调函数的"横向发展"改为"向下发展

Promise.resolve 传入的参数类型

 a) arg是一个普通数据,会构建一个 fulfilled状态的 promise,并将 arg 的值 作为 resolve的参数
 b) arg 是 undefined, 会将 undefined 作为 resolve的参数,并返回 fulfilled状态的 promise
 c) arg 是一个 thenable(某个对象中有 then 方法) 对象, 那么 会直接执行 then 方法, 返回的promise对象状态由 then函数来确定
 d) arg 是一个promise 对象, 那么会返回一个 和 arg promise对象状态完全一致的 promise

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值