美文网首页
2021-07-11 Promise规范以及应用

2021-07-11 Promise规范以及应用

作者: 走花鹿 | 来源:发表于2021-07-11 14:27 被阅读0次

PromiseA+规范

大纲

  1. PromiseA+规范
  2. 实现一个promise
  3. generator async

术语:

  1. promise是有then方法的对象或者函数
  2. thenable 是一个有then方法的对象或者是函数
  3. value是promise状态成功时的值, resolve(value), value可以是:string,number,boolean,undefined,thenable promise
  4. reason是promise状态失败时的值, reject(reason)
  5. exception 使用throw跑出的异常

规范

Promise States 有三种状态

  1. pending
    1.1 这是初始状态,可改变的;
    1.2 在resolve和reject前都处于这个状态;
    1.3 通过resolve -> fulfilled状态;
    1.4 通过reject-> rejected状态
  2. fulfilled
    2.1 这是最终态,不可变;
    2.2 一个promise被resolve之后会变成这个状态
    2.3 必须拥有一个value值
  3. rejected
    3.1 最终态,不可变;
    3.2 一个promise被reject之后会变成这个状态;
    3.3 必须拥有一个reason

总结一下:
pending -> resolve(value) -> fulfilled
pending -> reject(reason) -> rejected

then

promiseA+规定promise应该提供一个then方法,用来访问最终的结果,无论value还是reason。

promise.then(onFulfilled, onRejected)
  1. 参数规范
    1.1 onFulfilled必须是函数类型,如果传入的不是函数,应该被忽略。
    1.2 onRejected必须是函数类型,如果传入的不是函数,应该被忽略。
  2. onFulfilled特性
    2.1 在promise变成fulfilled时,应该调用onFulfilled,参数是value。(onFulfilled的执行时机)
    2.2 在promise变成fulfilled之前,不应该调用onFulfilled。
    2.3 只能被调用一次(怎么实现只调用一次?)。
  3. onRejected特性
    3.1 在promise变成rejected时,应该调用onRejected,参数是reason。
    3.2 在promise变成rejected之前,不应该调用onRejected。
    3.3 只能被调用一次。
  4. onFulfilled和onRejected应该是微任务阶段执行。
    实现promise的时候,如何去生产微任务?
  5. then方法可以被调用多次
    5.1 promise状态变成fulfilled之后,所有的onFulfilled回调都需要按住注册的顺序执行,也可以理解为按照.then的顺序执行。
    5.2 promise状态变成rejected之后,所有的onRejected回调都需要按住注册的顺序执行,也可以理解为按照.then的顺序执行。
  6. 返回值
    then应该返回一个promise
const promise2 = promise.then(onFulfilled, onRejected)

6.1 onFulfilled或onRejected执行结果为x,调用resolvePromise
6.2 onFulfilled或onRejected执行过程中抛出了异常,promise2需要被rejected
6.3 如果onFulfilled不是一个函数,promise2应该以promise1的value触发fulfilled
6.4 如果onRejected不是一个函数,promise2应该以promise1的reason触发fulfilled

  1. resolvePromise
resolvePromise(promise2, x, resolve, reject)

7.1 如果promise2和x相等,reject typeError
7.2 如果x是一个promise
7.2.1 如果x是pending状态,promise必须要在pending状态,直到x的状态变更
7.2.2 如果x是fulfilled,value->fulfilled
7.2.3 如果x是rejected,reason->rejected
7.3 如果x是一个Object/Function
去获取x.then,如果报错reject reason
then是一个函数,then.call(x, resolvePromiseFn, rejectPromiseFn)

一步步实现一个Promise

  1. const promise = new Promise();,代表Promise应该是一个构造函数或者class
  2. 定义三种状态
  3. 初始化状态
  4. resolve和reject方法
    4.1 这两个方法要更改status,从pending编程fulfilled/ rejected
    4.2 入参分别是value/reason
  5. 对于实例化promise时的入参处理
    5.1 入参是一个函数,接收resolve reject两个参数
    5.2 初始化promise的时候,就要执行这个函数并且有任何的报错都要通过reject抛出去

    用try catch 初始化立刻执行
  6. then方法
    6.1 then接收两个参数,onFulfilled和onRejected
    6.2 检查并处理参数,如果参数不是函数,就忽略


    then方法

相关文章

  • 2021-07-11 Promise规范以及应用

    PromiseA+规范 大纲 PromiseA+规范 实现一个promise generator async 术语...

  • Promise原理及实现

    Promise标准 Promise 规范有很多,如Promise/A,Promise/B,Promise/D 以及...

  • Promise实现

    实现Promise根据Promise规范规范很短,所以每句都很重要 Promise特点 状态改变后不可再改变(状态...

  • 简述promise原理

    Promise/A+规范 一、 promise应用场景 1 解决回调地狱比如我们经常可能需要异步请求一个数据之后作...

  • Promise

    CommonJs的Promise规范有许多种,我们一般讨论的是Promise/A+规范,它定义了Promise的基...

  • lesson 1 promise规范学习笔记 -- 2021-0

    课程标题 路白-Promis规范 课程目标 了解promise a+规范 根据promise a+规范手写出自己的...

  • 35_谈谈你对promise的用法和理解

    一、初识Promise 1、什么是promise? Promise可能大家都不陌生,因为Promise规范已经出来...

  • Promise

    Promise迷你书 Promise在规范上规定 Promise只能使用异步调用方式 。 Promise.reso...

  • Promise

    什么是Promise Promise解决了什么问题 Promise/A+规范 Promise的原理(如何实现链式调...

  • 实现 Promise/A+ 规范 & ES6 Promise方法

    实现 Promise/A+ 规范 检测通过 实现 ES6 Promise 方法

网友评论

      本文标题:2021-07-11 Promise规范以及应用

      本文链接:https://www.haomeiwen.com/subject/kmykpltx.html