Javascript 设置超时晚于承诺

Javascript 设置超时晚于承诺,javascript,asynchronous,promise,Javascript,Asynchronous,Promise,在示例下方运行,您将看到setTimeout回调总是在Promise回调之后执行。是否有任何机制导致这种结果?或者这不是真的 setTimeout(函数(){ 控制台日志(1) }, 0) 新承诺(功能(解决、拒绝){ 决议(2) }).then(console.log) setTimeout(函数(){ 控制台日志(3) }, 0) 新承诺(功能(解决、拒绝){ 决议(4) }).then(console.log) console.log('rush…')本机承诺被安排为一个微任务。当当前执

在示例下方运行,您将看到setTimeout回调总是在Promise回调之后执行。是否有任何机制导致这种结果?或者这不是真的

setTimeout(函数(){
控制台日志(1)
}, 0)
新承诺(功能(解决、拒绝){
决议(2)
}).then(console.log)
setTimeout(函数(){
控制台日志(3)
}, 0)
新承诺(功能(解决、拒绝){
决议(4)
}).then(console.log)

console.log('rush…')
本机承诺被安排为一个微任务。当当前执行堆栈完成时,首先运行微任务,然后执行常规任务


有关事件循环的更多信息,包括有关微任务的信息,我建议使用以下演示文稿:。关于微任务的部分在中的24分钟开始。

本机承诺被安排为微任务。当当前执行堆栈完成时,首先运行微任务,然后执行常规任务


有关事件循环的更多信息,包括有关微任务的信息,我建议使用以下演示文稿:。关于微任务的部分在中的24分钟开始。

这是正常的,因为Javascript是单线程的考虑到您是如何编写代码的,您的承诺是以同步方式执行的(在加载脚本时),而setTimeout是异步的(在加载脚本后).

这是正常的,因为Javascript是单线程的并且考虑到您是如何编写代码的(在加载脚本时),您的承诺是以同步方式执行的,而setTimeout是异步的(在加载脚本后)。

请查看stackoverflowRelated:,看看stackoverflowRelated:,这段视频很棒。值得一帧一帧地看。Just found也描述了细节。这段视频很棒。值得一帧一帧地看。Just Find也描述了细节。