Promise/A+ 规范第 2.2.4 条背后的意图是啥?
Posted
技术标签:
【中文标题】Promise/A+ 规范第 2.2.4 条背后的意图是啥?【英文标题】:What is the intention behind clause 2.2.4 of Promise/A+ spec?Promise/A+ 规范第 2.2.4 条背后的意图是什么? 【发布时间】:2016-08-24 06:07:32 【问题描述】:promise/a+ 规范的第 2.2.4 条说:
onFulfilled 或 onRejected 在执行之前不能被调用 上下文堆栈仅包含平台代码。
然后在注释中指出:
这里的“平台代码”是指引擎、环境和承诺 实现代码。在实践中,这一要求确保 onFulfilled 和 onRejected 在事件之后异步执行 循环调用 then ,并使用新堆栈。
这样做的目的是为了保证当一个链中有大量的onFulfilled函数时,它们的执行不会导致线程阻塞?
或者还有什么我没有读到的字句之间的内容?
【问题讨论】:
另请参阅here、here 和those threads 中的较小程度的threads 【参考方案1】:原因是当回调是总是异步而不是可能异步时,它提供了更一致和可靠的 api 来使用。考虑以下代码
var pizza;
browse***().then(function()
eatPizza(pizza);
);
pizza = yesterdaysLeftovers;
现在 sn-p 清楚地假设 onFulfilled
不会立即被调用,如果不是这样,我们很快就会有未使用的比萨饼,我们会感到饥饿。虽然在这种情况下,bug 很容易修复,但执行顺序更容易遵循,因此当您可以做出一些这样的假设时,api 更容易使用。
有一个封闭的issue on the Promises/A+ GitHub repo 讨论了这个问题。
【讨论】:
以上是关于Promise/A+ 规范第 2.2.4 条背后的意图是啥?的主要内容,如果未能解决你的问题,请参考以下文章