众所周知,Promise
是一个社区先驱的 Built-in
对象,Promises/A+
标准也是 ES6 Promsie
的前身,规范了 Promise
不同实现的 thenable
可交互性,主要是集中在 Promise
的构造函数本身和原型成员 then
方法的实现,ES6 Promise
则在 Promises/A+
标准基础上添加了更多的静态成员和原型成员。
我在自定义实现一个 ES6 Promise
的过程中出现了一些问题,即使我的 Promise
符合 Promises/A+
标准(可以通过 promises-aplus-tests
的测试),但是和 ES6 Promise
的行为仍有一定差异,即使祂能够和原生 Promise
交互。
目前的发现的行为或者说功能差异有以下两个:
new Promise
时若 resolve
一个 Promise
(或者 thenable
)对象,ES6 Promise
会进行深层的 resolve
,Promises/A+
标准则忽略了这一点,受影响的 API 主要是 Promise
的构造函数和 Promise.resolve()
方法;new Promise
时若 resolve
了我自己(即我等我自己完成我自己),ES6 Promise
会 reject
一个循环链式调用的异常,Promises/A+
标准则忽略了这一点,受影响的 API 主要是 Promise
的构造函数和 Promise.deferred()
方法;全知万能的 v2ex
啊,
我的问题:是否有关于 ES
标准的 Promise
对象和 Promises/A+
标准详细比较的完整内容或者学习资源,重点是两者的其他方面的异同比较,评论区大神也可以补充分享其他的异同,求求了,这对我真的很重要。
PS:尽量不要贴 bluebird
或 core-js
的 Promise
源码 mock
,因为我只想知道具体差异,然后尝试实现,上面列举的差异是被我发现后成功修复的部分。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.