Javascript承诺保证-Javascript事件循环

时间:2019-03-21 20:39:42

标签: javascript es6-promise

在Mozilla Promise文档中,有一个“保证”部分:

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

它包含以下语句:

  

不同于“旧式”,传入的回调,promise带有一些保证:

     

在完成当前操作之前永远不会调用回调   运行JavaScript事件循环。

这对我来说很有意义,这是我期望的行为,但是我正在寻找支持此“保证”的其他文档。

是否存在某种明确记录/要求此规范的规范?是否可以为任何提供本机Promise实现的JavaScript运行时保证?是狂野的西部,您不能依靠它,等等。

3 个答案:

答案 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上调用的。