初识Promise异步解决方案

124 阅读2分钟

一、promise定义

Promise是一个代理,将处理程序与异步操作的成功值或失败原因关联起来,使异步方法可以像同步方法一样返回值,Promise的返回值是一个新的Promise对象。

Promise对象包括状态值PromiseState返回值PromiseResult

  • 状态值PromiseState:
    • pading-待定:初始状态,没有兑现也没有拒绝
    • fulfilled-已兑现:操作成功
    • rejected-已拒绝:操作失败

Promise的状态值为已兑换或已拒绝,即不再处于待定状态,那么则称之为已敲定(settled),已敲定的值不能更改状态值。

image.png

二、promise链式调用

一个Promise对象的执行会得到一个新的Promise对象,这个新的Promise对象的执行又会得到一个新的Promise对象,使用then方法执行成功的回调,上一个成功的返回值通过then方法会返回到下一个then方法,层层传递,当出现拒绝状态使用catch方法执行失败的回调,返回错误的原因。像这种方法连续调用的形式 ,我们称作链式调用。

promise.then(filfilledA).then(filfilledB).then(filfilledC).catch(rejected)

//箭头函数实现
promise.then(value=>xxx).then(value=>xxx).then(value=>console.log(value)).catch(err=>console.error(err))

三、thenable对象

thenable对象实现.then()方法,方法被调用时需要传入两个回调函数,一个用于promise被兑现时调用,一个用于promise被拒绝时调用。promise是thenable对象

js允许promise位置使用thenable对象

const aThenable={
    then(onFulfilled,onRejected){
        onFulfilled({
            then(onFulfilled,onRejected){
                onFulfilled(42)
            }
        })
    }
}

Promise.resolve(aThenable)

Promise.resolve可以解析Promise对象,也可以追踪thenable对象

四、Promise构造函数

通过构造函数,封装未支持Promise的基于回调的API

new Promise(executor)

  • 参数

executor 构造函数执行function。接受参数resolveFn和rejectedFn,rejectedFn抛出的错误,被Promise拒绝,忽略返回值

  • 返回值

调用promise构造函数,返回promise对象。
当resolveFn和rejectedFn被调用时,Promise对象变为已解决状态。当调用resolveFn和rejectedFn被调用且传入下一个Promise中作为参数时,Promise对象状态变为已解决,但是Promise状态处于未敲定状态(Promise整体还未完成调用)