gpt4 book ai didi

javascript - 关于 Promises/A+ 规范,术语 "thenable"和 "promise"之间有什么区别?

转载 作者:行者123 更新时间:2023-11-28 05:45:38 29 4
gpt4 key购买 nike

我正在查看“Promises/A+”规范,但无法理解以下内容:

关于第 1 节:术语,

1.1。 “promise” 是一个带有 then 方法的对象或函数,其行为符合此规范。

1.2。 “thenable” 是定义 then 方法的对象或函数。

那么术语“thenable”“promise”之间有什么区别?

也在第 2.3 节中。 promise 解决程序,

Promise 解析过程是一个抽象操作,以 Promise 和值作为输入,我们将其表示为 [[Resolve]](promise, x)

所以我的问题是:

为什么它用 2 个左括号和右括号表示?有什么约定吗?

非常感谢。

最佳答案

So What is the difference between the terms "thenable" and "promise"?

我认为您已经引用的部分确实很好地回答了这个问题:

  • thenable 是一个带有 then 方法的对象。任何物体。
  • promise 是一个带有 then 方法(即 thenable)的对象,符合规范

到目前为止很简单。我认为你真正的问题是:“为什么他们如此杰出?

问题在于,通过查看一个对象,您无法确定它是否是一个 promise 。
可能能够看出这是一个promise,因为您可以看到它的then方法是由您自己或您信任的人(通常是您选择的promise库)实现的。您将能够“看到”这一点,因为该对象确实继承自您的 promise 原型(prototype),或者您甚至可以将该方法(引用地)与您定义的函数进行比较。或任何其他足以满足您需求的检查方法。
可能能够看出这不是一个 Promise,因为它没有 then 方法。
但是,您如何处理实现 then 的对象,但不知道它是一个 Promise?它是一个thenable,并且将被这样处理。

Promises/A+ 规范旨在实现 Promise 实现之间的互操作性,并使用 duck typing.then() 方法。 。它确实指定了如何处理此类 thenables(可能是 promise 或至少具有类似行为)的精确算法,以便您可以根据它们创建实际的、可信的(“已知”) promise 。

Why is it denoted within 2 opening and closing brackets? Is there any convention?

是的,ECMAScript 规范使用此语法来表示 internal methods and properties :

The names of internal properties are enclosed in double square brackets [[ ]].

这些属性实际上并不需要存在,它们纯粹用于描述应该发生的情况 - 实现的行为必须就像使用它们一样。但它们完全是抽象操作。

关于javascript - 关于 Promises/A+ 规范,术语 "thenable"和 "promise"之间有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38552142/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com