众所周知,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,因为我只想知道具体差异,然后尝试实现,上面列举的差异是被我发现后成功修复的部分。
