Javascript 进入任务队列需要多长时间?

Javascript 进入任务队列需要多长时间?,javascript,asynchronous,promise,task-queue,event-loop,Javascript,Asynchronous,Promise,Task Queue,Event Loop,我仍在试图弄清楚事件循环以及任务队列处理的确切时间 console.log('start'); Promise.resolve().then(function() { console.log('promise'); }); console.log('end'); 这将产生以下结果: > "start" > "end" > "promise" 承诺是否应该立即解决,从而调用堆栈在打印“end”之前立即为空,从而回调将在打印“end”之前作为任务处理 很明显,我在这里遗

我仍在试图弄清楚事件循环以及任务队列处理的确切时间

console.log('start');

Promise.resolve().then(function() {
  console.log('promise');
});

console.log('end');
这将产生以下结果:

> "start"
> "end"
> "promise"
承诺是否应该立即解决,从而调用堆栈在打印“end”之前立即为空,从而回调将在打印“end”之前作为任务处理


很明显,我在这里遗漏了以下内容:a)将已解决的承诺回调添加到任务队列时,或b)在事件循环中处理任务时。

使用您使用的术语。只有平台代码在运行时执行任务队列,也就是说,所有同步代码都已执行完毕。您的代码保证完全按照该顺序执行


它们在事件循环之前运行(它们是“微任务”),这就是为什么您的
然后在任何
设置超时之前执行

问题是,我认为堆栈在立即解决承诺之后是清晰的,但实际上堆栈在那一点上并不清晰。您可以将执行的整个代码块想象为
C
程序的
main()
函数,以进行
C
类比


因此,由于堆栈不清楚,即使回调队列中的微任务现在正在等待处理,它也不会得到处理,直到主线程中的所有同步JS代码完成。

承诺是一个异步任务,它需要时间来解决结果。根据您的请求,它可能需要很长时间,也可能很快得到解决。即使有“即时解决”,承诺仍然会被放在自己的任务中,并且是异步的。很难预测这将在何时执行和/或解决。如果您真的需要在执行后面的语句之前解析它,那么使用async/await。@Variable我知道了,但在这种情况下它会立即解析。是因为它仍然需要将该请求卸载给一个工作进程,这需要一些时间吗?当前任务不会因为某个任务被推到另一个队列而神奇地停止;当前任务一直执行到返回,然后才会发生其他任何事情。为什么堆栈会变为空?
console.log('start')
console.log('end')位于相同的函数中,这意味着它们位于相同的堆栈帧中。