这是我在JS中try Promise时发现的一个有趣的现象.考虑一下这段代码:

Promise.resolve(1).then(2).then(console.log);

这将输出1作为其输出.为什么本地实现的Promise API没有抛出异常?当非函数参数被忽略时,"跳过"它有什么好处呢?我真的很想得到一个答复

这篇帖子是在MDN找到的.

推荐答案

现代promise 的运作方式是由ECMAScript spec人定义的.但是promise 在被添加为语言的核心部分之前就已经存在了,所以为了向后兼容,它们被设计成与社区构建的promise 的行为相匹配.社区使用的规范称为Promises/A+,相关部分如下:

2.2 then

A promise’s then method accepts two arguments:
promise.then(onFulfilled, onRejected)

2.2.1 Both onFulfilled and onRejected are optional arguments:
2.2.1.1 If onFulfilled is not a function, it must be ignored.
2.2.1.2 If onRejected is not a function, it must be ignored.

ECMAScript在其规范中继承了这一行为.那个说明书读起来难多了,但我认为它是PerformPromiseThen的这部分

  1. If IsCallable(onFulfilled) is false, then
    a. Let onFulfilledJobCallback be empty.

至于他们为什么 Select 这样设计,我不知道.

Javascript相关问答推荐

容器如何更改默认插槽中子项的显示?

Phaser框架-将子对象附加到Actor

将2D数组转换为图形

函数返回与输入对象具有相同键的对象

MathJax可以导入本地HTML文档使用的JS文件吗?

无法从NextJS组件传递函数作为参数'

如何在ASP.NET中使用Google Charts API JavaScript将条形图标签显示为绝对值而不是负值

在Matter.js中添加从点A到另一个约束的约束

如何将数据块添加到d3力有向图中?

将Node.js包发布到GitHub包-错误ENEEDAUTH

使用auth.js保护API路由的Next.JS,FETCH()不起作用

为什么JPG图像不能在VITE中导入以进行react ?

当我try 将值更改为True时,按钮不会锁定

如何在和IF语句中使用||和&;&;?

将Auth0用户对象存储在nextjs类型脚本的Reaction上下文中

在SuperBase JS客户端中寻址JSON数据

需要刷新以查看Mern堆栈应用程序中的更改

如何缩小函数中联合返回类型的范围

浮动标签效果移除时,所需的也被移除

使用导航时,路径的所有子组件都必须是路径