Promise/A + spec第2.2.4条的目的是什么?

Cui*_*崔鹏飞 7 javascript event-loop promise es6-promise

promise/a +规范第2.2.4条规定:

在执行上下文堆栈仅包含平台代码之前,不得调用onFulfilled或onRejected.

然后在笔记中说明:

这里的"平台代码"意味着引擎,环境和承诺实现代码.实际上,这个要求确保onFulfilled和onRejected异步执行,然后调用事件循环,然后调用新堆栈.

这样做的目的是确保当链中存在大量onFulfilled函数时,它们的执行不会导致线程阻塞吗?

或者在我不读的行之间还有其他什么东西吗?

nop*_*ppa 8

其理由是,当回调是永远异步,而不是可能是异步的,它提供了更多的一致和可靠的API使用.请考虑以下代码

var pizza;
browseStackOverflow().then(function(){
    eatPizza(pizza);
});
pizza = yesterdaysLeftovers;
Run Code Online (Sandbox Code Playgroud)

现在该片段明确假设onFulfilled不会立即调用,如果情况并非如此,我们很快就会有未使用过的披萨,我们会感到饥饿.虽然在这种情况下错误很容易修复,但执行的顺序更容易遵循,因此当您可以做出这样的假设时,api更容易使用.

在Promises/A + GitHub回购中有一个封闭的问题,并讨论了这个问题.