gpt4 book ai didi

javascript - 为什么可以将非函数参数传递给 Promise.then() 而不会导致错误?

转载 作者:搜寻专家 更新时间:2023-10-31 23:37:17 31 4
gpt4 key购买 nike

我有以下内容:

new Promise(resolve => setTimeout(resolve, 2000))
.then(() => console.log("after 2 seconds"));

new Promise(resolve => setTimeout(resolve, 3000))
.then(console.log("before 3 seconds (instantly)"));

产生以下输出:

> node index.js
before 3 seconds (instantly)
after 2 seconds

Promise.then()需要一个 onFulfilled 函数,但我传入了 console.log("before 2 seconds (instantly)"),这不是一个函数。两部分问题:

  • 为什么 console.log("before 2 seconds (instantly)") 立即执行(或根本不执行)?
  • 当我没有传入函数时,为什么第二个 Promise 没有引发异常?

最佳答案

代码

console.log("before 3 seconds (instantly)")

是一个表达式,特别是一个函数调用表达式。无论它出现在哪里,它的意思都是一样的,包括作为 Promise 的 .then() 方法参数的外观。与任何其他类似语言一样,函数调用中使用的表达式在函数调用之前被计算,所以

.then(console.log("before 3 seconds (instantly)"))

导致 console.log() 函数被调用首先,然后将返回值传递给 .then()。这就是为什么您会立即在控制台中看到该消息的原因。

undefined 传递给 .then() 是允许的,因为这是 console.log() 返回的内容,所以不会引发错误。

如果您希望 console.log() 在 Promise 完成时发生,您可以将其包装在一个函数中:

.then(function() { console.log("after 3 seconds"); })

关于javascript - 为什么可以将非函数参数传递给 Promise.then() 而不会导致错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42094764/

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