承诺/A+规范第2.2.4条的意图是什么

What is the intention behind clause 2.2.4 of Promise/A+ spec?

本文关键字:4条 意图 是什么 范第 承诺      更新时间:2023-09-26

承诺/a+规范第2.2.4条规定:

onFulfilled或onRejected必须在执行之前才能调用上下文堆栈仅包含平台代码。

然后在注释中指出:

这里的"平台代码"指的是引擎、环境和承诺实现代码。在实践中,此要求确保onFulfilled和onRejected在事件之后异步执行循环循环,然后调用,并使用新堆栈。

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

或者,字里行间还有什么我没有读到的东西吗?

原因是,当回调总是异步而不是可能异步时,它提供了更一致和可靠的api。考虑以下代码

var pizza;
browseStackOverflow().then(function(){
    eatPizza(pizza);
});
pizza = yesterdaysLeftovers;

现在,这个片段清楚地假设onFulfilled不会立即被调用,如果不是这样的话,我们很快就会有闲置的披萨,我们就会饿了。尽管在这种情况下,这个错误很容易修复,但执行顺序更容易遵循,因此当你可以做出这样的假设时,api更容易使用。

Promises/a+GitHub回购存在一个已结束的问题,对此进行了讨论。