javascript - Promise/A+规范及Promise实现原理问题
迷茫
迷茫 2017-04-11 10:42:45
[JavaScript讨论组]

正在想方设法的实现一个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回调函数),为什么用个数组?

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

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

全部回复(3)
PHP中文网

因为可以在同一个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,不过还有部分测试用例没有通过。

巴扎黑

之前写过一个简单教程(之所以叫简单,是因为实现很粗糙,肯定没有实现全部Promise功能),但是在教程里带你一步步通过测试用例把一个Promise涉及的基本内容实现了。或许对你有帮助手写Promise

PHPz

数组是用来保存注册的回调用的,至于then返回promise,就是将遍历执行保存的回调函数时把回调函数执行的结果包装进一个新的promise然后传给下一个回调函数。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号