JavaScript Promise保证 - JavaScript事件循环

3
在Mozilla的Promise文档中,有一个Guarantees(保证)部分:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Using_promises#Guarantees

它包含以下声明:

与“旧式”的传递回调不同,Promise带有一些保证:

在JavaScript事件循环的当前运行完成之前,永远不会调用回调函数。

这对我来说很有意义,也是我期望的行为,但我正在寻找一些支持这种“保证”的额外文档。
是否有一些规范明确记录/要求此项?是否对任何提供本机Promise实现的javascript运行时进行保证?这是野蛮西部,您不能依赖它等。

1
如果有一种规范定义 ECMAScript 及其内置功能的工作方式就好了。参考链接 - JLRishe
相关链接:https://stackoverflow.com/a/29454966/1048572,https://dev59.com/OX_aa4cB1Zd3GeqP11Zw - Bergi
3个回答

5

是否有明确记录/要求这一点的规范?

Promise库使用的规范是Promise A+规范。这个特定的要求是第2.2.4条。几乎任何你使用的Promise库都会遵守这个要求,但如果你需要检查这个要求,有测试可以验证规范的合规性

更重要的是,现在承诺已成为语言的一部分,原生承诺受ECMAScript规范约束。承诺最初是在2015版中引入的,在第25.4节中介绍。截至本回答时,最新完成的版本是2018年版。您所询问的具体行为是由管理.then方法的章节(在此处找到)和triggerPromiseReaction的章节(在此处找到)引起的。每个章节都会引用enqueueJob操作(在此处找到)。


2
ECMAScript的行为受ECMAScript规范约束,而不受Promises/A+的约束,前者没有提到后者。因此,你问题的后半部分是关键。 - JLRishe
1
虽然ES2015可能是规范中首次描述Promise的版本,但它已经被更新了3次。您可能需要参考当前的规范说明。 - Bergi
谢谢,我已经合并了你们两个的反馈 :) - Nicholas Tower

2
“有一些明确记录/要求这个的规范吗?” “是的, Promises/A+ interoperability spec 要求这样做。” “但是,该文档对于本地 Promise 实现并非规范性的。” “任何提供本地 Promise 实现的 JavaScript 运行时都保证了这一点吗?” “是的。这个特性是 ECMAScript 规范中本地 Promise 对象的调度行为的一个隐含属性。” “它是无序的,你不能依赖它吗?” “你可以并且应该依赖它。由于 Promises/A+ 规范的普及,即使大多数非本地 promise 实现也保证了这一点。”

1
与任何内置的ECMAScript功能一样,原生Promise的行为在ECMAScript规范中定义。
第9版规范中相关的部分是25.6.5.4.1节,它定义了.then方法的行为,以及8.4.1节,描述了EnqueueJob操作(当.then在已解决的promise上调用时使用)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接