javascript - 静态方法 Promise.resolve 上的关键字 new

标签 javascript promise bluebird es6-promise

我在 Promise.resolve 上看到了对 new 关键字的“错误”调用,但令我惊讶的是它竟然有效!有人可以向我解释一下发生了什么,以及它与省略 new 关键字是否有任何不同吗?

new Promise.resolve(1)

查看 operator precedence 的 MDN 文档(具体来说成员访问函数调用new(无参数列表))和new keyword ,上面不应该抛出错误,因为我假设表达式的计算方式如下:

new (Promise.resolve(1))

我想我在这里遗漏了一些(明显的)东西。提前致谢!

注意:使用 bluebird 库 2.x

最佳答案

Here是一个非常好的答案,描述了 new 如何运算符在 JavaScript 中工作。

本质上发生的事情是 Promise.resolve 被视为构造函数,但是构造的对象被丢弃,因为 Promise.resolve 返回了一些东西(你的 Promise 对象) )。

在这种情况下,new 不会造成任何损害,因为 Promise.resolve 不依赖于对 this 的访问,并且如果您愿意的话,只需将其删除即可。

相反,将 new 添加到实例方法调用中将导致非常奇怪的行为:

let x = Promise.resolve()
new x.then(() => console.log("Resolved")) // Will almost certainly throw an error

关于javascript - 静态方法 Promise.resolve 上的关键字 new,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46400209/

相关文章:

javascript - 将拒绝/解决添加到捕获/成功

javascript - 查找函数是否返回 Promise 的方法

javascript - Google Sheets API Node 客户端库最小示例

javascript - 如何同步触发两个异步函数?

javascript - Bluebird Promise.map 无法正常工作

JavaScript Promise 架构 : Squelch an error

javascript - 如何使用 Bluebird promise Node 的 child_process.exec 和 child_process.execFile 函数?

javascript - 如何在 NodeJS 中像 .htaccess 文件一样执行重定向?

javascript - Breeze.js 普通的旧 SQL

javascript - 如何在 JavaScript 中迭代数组和对象