JS-Promise详解

Promise

Promise:ES6新增的内置类(构造函数),用来规划异步编程代码,解决回调地狱问题

 let p1 = new Promise([executor])
     + [executor]必须是一个函数,而且new Promise的时候会立即把其执行 “同步”
     + p1是其创建出来的实例
       私有属性
       + [[PromiseState]]:"pending"、"fulfilled"、"rejected"  实例的状态
       + [[PromiseResult]]:undefined  实例的值「成功的结果或失败的原因」
       公共方法:Promise.prototype
       + then
       + catch
       + finally
       + ...
     + p1.then([onfulfilled],[onrejected])
       + [onfulfilled]/[onrejected]都是函数
       + 实例状态是成功fulfilled的时候,会把[onfulfilled]执行,并且把实例的值作为成功的结果传递给他
       + 实例状态是失败rejected的时候,会把[onrejected]执行,把实例值作为失败原因传递给他 

回调地狱

以jQuery的ajax请求为例,在回调函数里面嵌套回调函数称为回调地狱

 $.get('./data.json', function cb1(data) {
    $.get('./data2.json', function cb2(data2) {
      $.get('./data3.json', function cb3(data3) {
        $.get('./data4.json', function cb4(data4) {
           console.log(data, data2, data3, data4)
        })
      })
    })
  }) 

如何修改实例的状态和值

 //基于这种方式创建实例 
      let p=new Promise((resolve,reject)=>{ 
         ...
      })
      + 如果executor函数执行报错,则把实例的状态修改为rejected,值是报错原因「不会抛异常」
      + resolve/reject也是函数
        resolve('OK') -> 把实例p的状态修改为fulfilled,值(成功结果)是'OK'
        reject('NO') -> 把实例p的状态修改为rejected,值(失败原因)是'NO'
      + 一但状态被修改为fulfilled或rejected,后期就不会再更改状态值了 

Promise的公共方法

then()

 每一次执行THEN方法,都会返回一个“全新的promise实例”
     let p2 = p1.then(onfulfilled,onrejected);
     不论是onfulfilled还是onrejected执行(由p1状态来决定),方法的执行决定了p2的状态和值
     + 首先看方法执行是否报错,如果报错了,则p2是失败态(rejected),值是报错原因
     + 如果执行不报错,再看方法的返回值
     + 如果返回的是“新的promise实例 -> @NP”,则@NP的状态和值直接决定了p2的状态和值
     + 如果返回的不是新实例,则p2状态是成功(fulfilled),值是函数的返回值
     
     执行Promise.resolve/reject/all/any/race...等静态私有方法,也会创建新的promise实例
     + Promise.resolve(10) 创建一个状态是成功fulfilled,值是10的实例
     + Promise.reject(0) 创建一个状态是失败rejected,值是0的实例 
let p1 = new Promise(function (res, rej) {
    res(888, 1, 2, 3, 4, 5, 6);//将实例状态变为成功态
    // res执行的时候可以让then的第一个回调函数执行
    // then的第一个回调函数 只有当实例的状态由pending变成fulfilled的时候才会触发
    // res 执行的时候的第一个“参数”会传给th
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值