Javascript承诺保证 - Javascript事件循环

问题描述 投票:1回答:3

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

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

它包含以下声明:

与“旧式”,传入的回调不同,承诺带有一些保证:

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

这对我来说很有意义,也是我期望的行为,但我正在寻找一些支持这种“保证”的附加文档。

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

javascript es6-promise
3个回答
4
投票

是否存在某种明确记录/要求此规范的规范?

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


2
投票

是否存在某种明确记录/要求此规范的规范?

是的,Promises/A+ interoperability spec需要这个。

但不,该文件不是本地Promise实施的规范。

这是否可以保证任何提供本机Promise实现的javascript运行时?

是。此功能是ECMAScript规范中针对本机Promise对象详细说明的调度行为的隐式属性。

它是狂野的西部,你不能依赖它吗?

你可以而且应该依赖它。由于Promises / A +规范的普及,即使大多数非原生承诺实施也能保证这一点。


1
投票

与任何内置ECMAScript功能一样,本机承诺的行为在ECMAScript Spec中定义。

第9版规范中的相关部分是section 25.6.5.4.1,它定义了.then方法的行为,section 8.4.1描述了EnqueueJob操作(当.then被调用已经解决的承诺时使用)。

© www.soinside.com 2019 - 2024. All rights reserved.