JavaScript – 关于承诺/ A规范,术语“可以”和“承诺”有什么区别?

我正在检查“承诺/ A”规范,但无法理解以下事项:

第1节术语,

1.1. “promise”是一个对象或函数,其方法的行为符合本规范.

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

那么术语“可以”和“承诺”有什么区别呢?

也在2.3节.承诺解决程序,

承诺解决程序是一个抽象的操作,作为输入的承诺和价值,我们表示为[[解决]](promise,x).

所以我的问题是:

为什么在2个开闭括号内表示?有什么约定吗

非常感谢你.

解决方法

So What is the difference between the terms “thenable” and “promise”?

我认为你已经引用的部分答案很好:

> a thenable是一个具有then方法的对象.任何对象.
>承诺是一种符合规范的方法(即可以)的对象.

到目前为止这么简单我认为你的实际问题是:“他们为什么要区别?

问题是通过查看一个对象,你无法决定是否是一个承诺.
你可能可以说这是一个承诺,因为你可以看到它的方法是由你自己或你信任的人实现的 – 通常你选择的诺基亚图书馆.您将能够“看到”,因为该对象确实从您的承诺原型中继承,或者甚至可以比较与所定义的函数相同的方法.或任何其他检查方法足够你.
你可能可以说这不是一个承诺,因为它没有那个方法.
但是对于那个实现的对象,你做什么呢,但不知道是一个诺言呢?这是一个可以的,将被处理这样.

Promises / A规范旨在实现承诺之间的互操作性,并使用duck typing的.then()方法的存在.它确定了如何处理这种可能性(可能是承诺或至少具有类似行为)的精确算法,以便您可以从中创建一个实际的,受信任的(“已知”)承诺.

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 [[ ]].

这些属性实际上并不需要存在,它们纯粹用于描述应该发生什么 – 实现必须像使用它们一样行事.他们是完全抽象的操作.

相关文章

什么是深拷贝与浅拷贝?深拷贝与浅拷贝是js中处理对象或数据...
前言 今天复习了一些前端算法题,写到一两道比较有意思的题:...
最近在看回JavaScript的面试题,this 指向问题是入坑前端必须...
js如何实现弹出form提交表单?(图文+视频)
js怎么获取复选框选中的值
js如何实现倒计时跳转页面