在Mozilla Promise
文档中,有一个“保证”部分:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Using_promises#Guarantees
它包含以下语句:
不同于“旧式”,传入的回调,promise带有一些保证:
在完成当前操作之前永远不会调用回调 运行JavaScript事件循环。
这对我来说很有意义,这是我期望的行为,但是我正在寻找支持此“保证”的其他文档。
是否存在某种明确记录/要求此规范的规范?是否可以为任何提供本机Promise实现的JavaScript运行时保证?是狂野的西部,您不能依靠它,等等。
答案 0 :(得分:4)
是否存在某种明确记录/要求此规范的规范?
promise库使用的规范是promise A +规范。此特定要求是number 2.2.4。尽管您需要检查此承诺库,但几乎所有您使用的诺言库都将遵守该承诺库,tests which can verify compliance with the spec
更重要的是,由于诺言已成为语言的一部分,因此原生诺言受ECMAScript规范支配。在2015年的section 25.4版中首次引入了承诺。截至本回答之时,最新的完整版本是2018 edition。您要求的特定行为是由于控制.then
方法的部分(found here)和关于triggerPromiseReaction(found here)的部分所致。每个反过来引用enqueueJob操作(found here)
答案 1 :(得分:2)
是否存在某种明确记录/要求此规范的规范?
是的,Promises/A+ interoperability spec要求这样做。
但是,不,该文档不是本机Promise
实现的规范。
任何提供原生Promise实现的JavaScript运行时都可以保证吗?
是的。此功能是ECMAScript规范中针对本地Promise
对象的调度行为的隐式属性。
这是荒野的西部,你不能依靠它吗?
您可以并且应该依靠它。由于Promises / A +规范的普及,即使是大多数非本地的Promise实现也可以保证这一点。
答案 2 :(得分:1)
与任何内置ECMAScript功能一样,本机承诺的行为在ECMAScript Spec中定义。
第9版规范中的相关部分是section 25.6.5.4.1(用于定义.then
方法的行为)和section 8.4.1(用于描述EnqueueJob操作(在{{ 1}}是在已经解决的Promise上调用的。