【发布时间】:2021-09-17 18:27:46
【问题描述】:
代码片段:
console.log('out1');
setTimeout(() => console.log('out2'), 0);
Promise.resolve('out3').then(console.log);
console.log('out4');
执行后我得到以下信息:
"out1"
"out4"
"out3"
"out2"
根据我的理解,由于第 2 行和第 3 行都是异步的,所以 out2 应该先打印,因为它首先放入队列。 但这里似乎相反。
"out1"
"out4"
"out2"
"out3"
- 谁能解释一下我在这里遗漏了什么。
- 代码中的第 3 行仅通过传递一个 console.log 是如何工作的
【问题讨论】:
-
“根据我的理解...” - 请添加您认为会发生的情况,以便我们实际回答 1。
-
“第 3 行如何...” - 这只是一个回调。
.then()需要一个将被执行的函数。你通过它console.log。 -
你可以这样写:
Promise.resolve('out3').then(x => console.log(x));但该函数只是将它的参数传递给 console.log,所以你可以只传递 console.log 函数本身。 -
至于1.,这里是JS event loop。您的问题似乎是为什么 Promise 在零延迟超时之前解决?为什么你期望超时首先解决?即使是零延迟超时也会在事件循环中“稍后”排队和处理,它只会在下一个可能的时刻轮到它。但显然是在承诺之后。
-
@Andreas 你现在可以检查一下吗。
标签: javascript promise timeout