Promise详细解说

概述

Promise是异步编程的一种解决方案,可以替代传统的解决方案--回调函数和事件。

ES6统一了用法,并原生提供了Promise对象。作为对象,Promise有一下两个特点:

  • 对象的状态不受外界影响。
  • 一旦状态改变了就不会在变,也就是说任何时候Promise都只有一种状态。

Promise与callback相比可以避免多个异步嵌套,降低代码复杂性。

Promise 的状态

任务状态

结果

等待态(pending)

挂起:任务在初始状态,未完成

执行态(fulfilled/resolved)

已解决:任务结束,成功完成

拒绝态(rejected)

被拒绝:任务结束,失败了

    let p = new Promise((resolve, reject) => {
        return; //Promise {<pending>}
        //resolve('成功'); //Promise {<fulfilled>: '正确'}
        //reject('失败'); //Promise {<rejected>: '错误'}
    })

Promise 原型

    //promise 原型
    console.log(Promise.prototype);

Promise构造函数的原型上的thencatchfinally方法可以进行任务结束后的下一步操作,每个Promise实例也可以使用。

then:然后,任务成功结束的后续操作在then方法中完成。

catch:捕获,任务失败结束的后续操作在catch方法中完成。

(注意:Promise中出现代码写错误,程序内部会throw Error,程序崩溃,但是这个catch也有捕获的能力,最终出现代码错也不会崩溃。)

finally:方法用于指定不管 Promise 对象最后状态如何,都会执行的操作

(finally方法的回调函数不接受任何参数,这意味着没有办法知道,前面的 Promise 状态到底是fulfilled还是rejected。这表明,finally方法里面的操作,应该是与状态无关的,不依赖于 Promise 的执行结果。)

Promise的执行特点:

1:该函数是不是回调函数? 是

 2:该函数是同步执行还是异步执行? 同步执行

 3:话说promise实例对象是为了解决异步回调地狱问题?究竟哪里的程序是异步程序呢?then 的回调函数异步执行

小问题?

为什么setTimeOut 回调执行,比 then 的回调慢?

then回调是微任务。setTimeOut是宏任务。在忽略Script情况下先微任务后宏任务。

静态方法

   1:Promise.resolve()

         作用:创建一个 已完成状态的promise实例

         返回值:promise实例

         实参: 作用: 给[[PromiseReuslt]] 赋值

    2:  Promise.reject()

      作用:创建一个已拒绝状态的promise 实例

      返回值:promise实例

      实参: 赋值错误对象

     3:  Promise.all()

     4:  Promise.race()

原型api

  1:then  2:catch 3:finally

        总结:

        1: promise 实例对象创建有几种方式

          1.1 new Promise

          1.2 then的返回值

          1.3 catch 的返回值

          1.4 finally 的返回值

          1.5 async 函数的返回值

        2: 更改promise状态有什么方式

           resove()  fulfilled 已接受

           reject()  rejected  已拒绝

        3: [[PromiseResult]] 赋值有几种方式

           2.1 resolve reject的实参

           2.2 then 的return

           2.3 async 的return

           注意:[[PromiseResult]] 赋值永远不可能是promise实例对象

               当[[PromiseResult]] 赋值为 prosmie实例时候。它会赋值该promise实例的.[[PromiseResult]]

               

        4: [[PromiseResult]] 取值有哪些方式

           4.1 then的回参

           4.2 await 返回值

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值