在Mozilla Promise
文档中,有一个保证部分:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Using_promises#Guarantees
它包含以下声明:
与“旧式”,传入的回调不同,承诺带有一些保证:
在完成当前运行的JavaScript事件循环之前,永远不会调用回调。
这对我来说很有意义,也是我期望的行为,但我正在寻找一些支持这种“保证”的附加文档。
是否存在某种明确记录/要求此规范的规范?这是否可以保证任何提供本机Promise实现的javascript运行时?它是狂野的西部,你不能依赖它,等等。
是否存在某种明确记录/要求此规范的规范?
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)
是否存在某种明确记录/要求此规范的规范?
是的,Promises/A+ interoperability spec需要这个。
但不,该文件不是本地Promise
实施的规范。
这是否可以保证任何提供本机Promise实现的javascript运行时?
是。此功能是ECMAScript规范中针对本机Promise
对象详细说明的调度行为的隐式属性。
它是狂野的西部,你不能依赖它吗?
你可以而且应该依赖它。由于Promises / A +规范的普及,即使大多数非原生承诺实施也能保证这一点。
与任何内置ECMAScript功能一样,本机承诺的行为在ECMAScript Spec中定义。
第9版规范中的相关部分是section 25.6.5.4.1,它定义了.then
方法的行为,section 8.4.1描述了EnqueueJob操作(当.then
被调用已经解决的承诺时使用)。