前端杂谈: 如何实现一个 Promise?

  • 时间:
  • 浏览:0
  • 来源:大发彩神UU快三_大发神彩UU快三官方

A promise is an object that may produce a single value some time in the future.

关键搞笑的话: Promise 是另好几个 在将来某个时刻产生另好几个 单一结果的对象.

通俗许多来说, Promise 代表了另好几个 值, 而且并是否是值让当他们 并非选取哪些以时会被返回.

掘金

有了以上的 makeThenable()土妙招,让当他们 可不才能在 promise 的fulfill()reject()回将 value 设置为 thenable:

最后让让当他们 对全版的代码进行测试:

https://medium.com/javascript-scene/master-the-javascript-interview-what-is-a-promise-27fc71e77261

这里有另好几个 问题,让当他们 在调用 ownPromise()后得到了 promise 实例,此时让当他们 可不才能直接调用 fulfill()reject()这另好几个 土妙招,而理论上让当他们 应该只应暴露 promise 的then()土妙招。什么都 让当他们 利用闭包将这另好几个 土妙招隐藏:

按照 Promise 的规范定义, 理想中 Promise 的调用土妙招为:

这里让当他们 只对异步调用fulfill 回调中抛出的 error 进行补救。

首先是异步调用每种,让当他们 将其 try catch 起来,在占据 异常时调用 reject 土妙招,并将异常作为参数传入。

没办法 ,让当他们 变得到了另好几个 可不才能链式调用的 promise。让让当他们 来测试一下:

现在让当他们 的 promise 实现了对情形控制的规范:

A promise is an object that may produce a single value some time in the future: either a resolved value, or a reason that it’s not resolved (e.g., a network error occurred). A promise may be in one of 3 possible states: fulfilled, rejected, or pending. Promise users can attach callbacks to handle the fulfilled value or the reason for rejection.

https://github.com/kriskowal/q/blob/master/design/README.md

这里是我的 前端、_D3.js_ 、 数据可视化 的 github 地址, 欢迎 star & fork :tada:

ssthouse-blog

接下来让让当他们 看 then()土妙招。为了返回另好几个 新的 promise,让当他们 首先得创建另好几个 新的 promise。其次当前 promise 在fulfill()reject()时,应该调用新的 promise 的fullfill()reject()土妙招。什么都 让当他们 在将 fulfullCallbackrejectCallback赋值给当前 promise 时,将其包装一下。代码如下:

为了实现规范中对于 Promise 情形变化的要求, 让当他们 需用为 Promise 加入情形管理, 并是否是步较为简单, 让让当他们 看代码:

这里让当他们 又发现另好几个 问题,是因为着另好几个 Promise 是因为着是fulfillreject情形。让当他们 再调用 then() 土妙招时,传入的回调土妙招永远不用被调用(是因为着 status 是因为着全是 pending)。

按照并是否是理想当中的调用土妙招, 让让当他们 写出第一版代码.

首先, 让让当他们 看看一段最普通的异步代码:

为此让当他们 加入另好几个 工具土妙招 makeThenable()。是因为着传入的 value 并是否是全是 then()土妙招,则直接返回 value。而且返回另好几个 有 then()土妙招的对象。

在该对象的 then()土妙招中,让当他们 根据 promise 的情形,调用不同的回调土妙招生成新的 value。

这段代码中让当他们 用到了 Symbol 来表示情形常量, 对 Symbol 不了解的同学可不才能看这里

为了判断 Promise 的情形, 让当他们 加入了 fulfillreject 另好几个 土妙招。并在其中判断 promise 当前情形。是因为着全是 pending 情形则直接 return(是因为着 Promise 情形可是因为着改变一次)。

让当他们 新定义了另好几个 土妙招 ownPromise() 用于创建 Promise,并在promiseAsyncFunc() 中暴露出 fulfillreject 接口方便异步代码去调用。

让当他们 为 promise 加入 value 字段,用于保存 Promise 的执行结果。

而且让当他们 的 Promise 有另好几个 问题: promise 的值没办法 被保存下来。是因为着 promise 在异步调用完成以前才被调用 .then() 土妙招,则让当他们 无法把异步调用的结果传递给回调函数。为此让当他们 需用为 Promise 加另好几个 value 字段:

对于 Promise 使用以及error handle 的讲解:

Promise 实现库之一: Q 对于 Promise 实现的讲解:

让当他们 的思路是在 .then() 土妙招中, 将 fullfill 和 reject 结果的回调函数保存下来, 而且在异步土妙招中调用. 是因为着是异步调用, 根据 event-loop 的原理, promiseAsyncFunc().then(fulfillCallback, rejectCallback) 传入的 callback 在异步调用开始英文时一定是是因为着赋值过了.

知乎专栏

以上什么都 让当他们 对于 Promise 的另好几个 简单的实现,实现思路主要参考了 Q-A promise library for javascript。该实现的 Promise 功能较为简陋,仅实现了每种 api/规范。有任何意见和建议欢迎在评论区交流 ;)

什么都 让当他们 需用在 then()土妙招中对其情形进行判断:

邮箱: ssthouse@163.com

而且是 fulfill 中是因为着突然出现的异常。让当他们 对fulfillCallback(value)是因为着突然出现的异常进行捕获,并将异常传递给rejectCallback

为了支持链式调用,.then() 土妙招的返回值需用是用 thenable (根据 Promise/A+ 规范, .then() 土妙招的返回值需什么都 另好几个 的 Promise)

github 主页

当前让当他们 的实现 Promise 中,异步逻辑代码和 Promise 的代码是杂糅在并肩的,让让当他们 将其区分开: