『你写的Promise, 是完美的吗?』

发布时间:2022-10-15 11:00

欢迎来这里 前端杂谈, 聊聊前端

代码在github

《手写 Promise》是一个经典的问题,基本上大家上手都可以按照自己的理解,写出来一个 promise, 有一天个朋友问我,"手写 Promise 要写到什么程度才是合格的 ?", 这也引起了我的兴趣和思考, "怎么样的 Promise ,才是完美的呢 ? "

完美的 Promise

第一个问题就是怎么样才算是一个完美的 Promise 呢, 其实这个问题也不难,实现一个和原生 Promise "相同"的 Promsie,不就是完美的了, 那么第二个问题也就来了,原生的 Promise 是按照什么标准来实现的呢, 查阅了资料之后知道是按照 [Promises/A+] (https://promisesaplus.com/)标准来实现的, 具体的实现在 ECMA - sec-promise-objects 上有记载, 现在标准有了,我们就可以来实现一个"完美的 Promise"了

Promises/A+

接下来我们来看看Promises/A+标准说了啥, 主要是两部分,一个是名词定义,一个是标准描述,其中标准描述由三个部分组成, 接下来我们简单介绍下:

Terminology

这部分是名词定义,主要是描述了各个名词在标准中的定义

  • promise: 是具有then行为符合规范的方法的objectfunction, 这里需要注意的是不是functionthen,是function中有then 方法
  • thenable: 是定义then方法的object函数,这个和上面promise的区别在于then是一个函数,不一定需要符合规范行为
  • value: 是任何合法的 javascript 值,包括undefinedthenablepromise ,这里的value包含了thenablepromise,结合下面的规范,会发现是一个可嵌套的关系
  • exception: 是一个通过throw 关键词抛出来的值
  • reason: 表示一个promise状态是rejected 的原因

ItVuer - 免责声明 - 关于我们 - 联系我们

本网站信息来源于互联网,如有侵权请联系:561261067@qq.com

桂ICP备16001015号