Promise总结

本文详细讲解了Promise对象的生命周期、状态变化规则、then与catch方法的使用,以及Promise.all和相关工厂方法如resolve/reject的应用。理解Promise有助于异步编程的高效组织。
摘要由CSDN通过智能技术生成
  • promise对象的状态不受外界影响,由异步操作的结果决定当前状态

    • Pending进行中
    • Fulfilled已成功
    • Reject已失败
  • 一旦状态改变就不会再变

    • Pending —>Fulfilled
    • Pending —> Reject
  • 一旦创建promise就会立即执行

  • then

    • 作用为Promise实例添加状态改变时的回调函数,第一个参数是Resolve的回调函数,第二个参数是Reject的回调函数
    • then方法返回的是一个新的Promise实例
    • 如果then返回的仍然是一个Promise对象,而后一个回调函数就会等待该Promise对象状态发生改变再调用
  • catch

    • 是then(null,rejection)的别名,用于指定发生错误时的回调函数
    • reject的作用等同于抛出错误
    • 错误总是会一直往后传递,知道被捕获为止,即错误总是会被下一个catch语句捕获
    • resolved后如果还存在错误,没定义catch方法则不会捕获到,但是如果resolved后存在宏任务回调函数中出现报错,错误会冒泡到外层,成了未捕获的错误,会显示在控制台。因为这个错误时再Promise函数体外抛出的。
  • Promise.all

    • 用于将多个Promise实例包装成一个新的Promise对象,参数不一定具有Iterator接口,且返回的对象每个成员都是Promise实例
    • 只有所有的实例的状态都变成fulfilled或者其中一个变为rejected,才会调用all后面的回调函数
  • Promise.resolve()

    • 如果参数是Promise对象,则不做任何修改,原封不动地返回这个实例
    • 如果参数是对象具有then方法, 则将这个对象转为Promise对象,然后执行then方法
    • 如果参数是原始值,则转为Promise对象,状态为Resolved
    • 不带有参数,直接返回一个Resolved状态的Promise对象
  • Promise.reject()

    • 返回一个Promise对象,状态为Pejected
    • Promise.reject()方法的参数会原封不动地作为reject的理由变成后续方法的参数。
  • 添加有用的Promise方法

    //捕获最后一个方法的错误。
    Promise.prototype.done = function(onFulfilled,onRejected){
        this,then(onFulfilled,onRejected).catch(function.reason){
            // 抛出全局异常
            setTimeout(()=>{
                throw reason
            },0)
        }
    }
    
    //无论最后状态如何都会执行
    Promise.prototype.finally = function(callback){
        let p = this.constructor;
        return this.then(
        	value => p.resolve(callback()).then(()=> value)
            reason => p.resolve(callback()).then(()=>{throw reason})
        )
    }
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值