javascript - Promise/A+规范及Promise实现原理问题

查看:99
本文介绍了javascript - Promise/A+规范及Promise实现原理问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

正在想方设法的实现一个Promise/A+。文档看下来,半懂半不懂,于是就去看别人实现的源码。

其他人在实现的时候,是有一个存储函数的数组(then方法中的onFulfilled函数和onRejected函数)。

但是Promise规范中,then方法返回的是一个全新的promise

在链式调用时:

promise.then(func1, func2)
       .then(func3, func4)
       .then(func5, func6)
       .then(func7, func8);

每一次then方法的调用,都会返回一个新的promise,一个promise最多就2个方法(一个onFulfilled和一个onRejected回调函数),为什么用个数组?

我不是很理解,可能我自己理解错了,请大神解决一下我的疑惑!

解决方案

因为可以在同一个promise上调用多次then:

对于

var promise = new Promise(...);
promise.then(func1, func2) 
promise.then(func3, func4)
promise.then(func5, func6)
promise.then(func7, func8);
...

假设promise执行的是一个异步任务,那么它一定是在将来的某轮循环才会fulfilled或者rejected。那么,在此之前,理论上你可以对它调用多次(几次、几十次、成千上万次)then。

只要它的状态还是pending,那么then方法注册的那些函数都还不会执行。所以你需要有个地方把这些函数先存起来,这么多存哪里啊?当然存数组里。

正好我前段时间也写了一个简单实现作为练习:https://github.com/manxisuo/m-Promise,不过还有部分测试用例没有通过。

这篇关于javascript - Promise/A+规范及Promise实现原理问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆