正在想方设法的实现一个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:
对于
假设promise执行的是一个异步任务,那么它一定是在将来的某轮循环才会fulfilled或者rejected。那么,在此之前,理论上你可以对它调用多次(几次、几十次、成千上万次)then。
只要它的状态还是pending,那么then方法注册的那些函数都还不会执行。所以你需要有个地方把这些函数先存起来,这么多存哪里啊?当然存数组里。
正好我前段时间也写了一个简单实现作为练习:https://github.com/manxisuo/m-Promise,不过还有部分测试用例没有通过。