PromiseA+规范(上)

PromiseA+ 规范

术语

1、promise 是一个有then方法的对象或者函数,行为遵循本规范
2、thenable 是一个有then方法的对象或者函数
3、value是promise状态成功时的值,也就是resolve的参数,类型可以是undefined / thenable promise, number,boolean, string, object
4、resason 是promise状态失败时的值,reject的参数,表示的拒绝的原因
5、exception 是一个使用throw抛出的异常值

规范

Promise States

promise应该有三种状态,,注意他们之间的流转关系
1、pending
1.1 初始的状态,可改变
1.2一个promise在resolve和reject之前 都处于这个状态
1.3 resolve -> fulfilled
1.4 reject -> rejected
2、fulfilled
2.1 最终太,不可改变
2.2 一个promise被resolve后变成这个状态
2.3 必须拥有一个value值,resolve(),默认valuej就是undefined
3、rejected
3.1 最终态,不可改变
3.2 一个promise被reject后变成这个状态
3.3 必须拥有一个reason
在这里插入图片描述

then

promise应该提供一个then方法,用来访问最终的结果

promise.then(onFulfilled,onRejected)
  1. 参数要求
    1.1 onFulfilled 必须是函数类型,如果不是函数,应该被忽略
    1.2 onRejected 必须是函数类型,如果不是函数,应该被忽略

  2. onFulfilled 特性
    2.1 在 promise 变成 fulfilled 时,应该调用 onFulfilled,参数是 value
    2.2 在 promise 变成 fulfilled 之前,不应该被调用
    2.3 只能被调用一次(可能需要一个变量来限制执行次数)

  3. onRejected 特性
    3.1 在 promise 变成 rejected 时,应该调用 onRejected,参数是 reason
    3.2 在 promise 变成 rejected 之前,不应该被调用
    3.3 只能被调用一次(可能需要一个变量来限制执行次数)

  4. onRejected 和 onFulfilled 应该是微任务
    queueMicrotask 来实现微任务的调用

  5. then 方法可以被调用多次
    5.1 promise 变成 fulfilled 后,所有 onFulfilled 回调都需要按照then的顺序执行(用数组来存放onFulfilled list)
    5.2 promise 变成 rejected 后,所有 onRejected 回调都需要按照then的顺序执行(用数组来存放onRejected list)

  6. then的返回值
    then 应该返回一个promise

    promise2 = promise1.then(xx,xxx);
    

    6.1 onFulfilled 或者 onRejected 执行结果为x,调用 resolvePromise 方法
    6.2 如果 onFulfilled 或者 onRejected 执行时抛出异常e,promise2 需要被 reject
    6.3 如果 onFulfilled 不是一个函数,promise2 以 promise1 的 value 触发 fulfilled
    6.4 如果 onRejected 不是一个函数 ,promise2 以 promise1 的 reason 触发 rejected

  7. resolvePromise

    resolvePromise(promise2,x,resolve,reject)
    

    7.1 如果 promise2 和 x 相等(===),那么reject typeError
    7.2 如果 x 是一个 promise
    如果 x 是一个 pending,promise2 一定继续 pending,直到 x 变成了 fulfilled 或者 rejected
    如果 x 是 fulfilled,resolve same value
    如果 x 是 rejected, reject same reason
    7.3 如果 x 是一个 object 或者 function

       try
       let then = x.then
       catch(e)
       reject promise e
    

    如果 x.then 是一个函数 ,then.call(x,resovlePromiseFn,rejectPromiseFn)
    如果 then 不是一个函数,fufilled promise x

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值