我在调查事件循环。但我遇到了一个问题。之前在eventloop上运行的是什么?微任务还是宏任务?如果我运行以下代码
Promise.resolve().then(()=> console.log('Promise'));
setTimeOut(()=>console.log("setTimeout"),0);console.log显示"Promise setTimeout";但根据答案,Difference between microtask and macrotask within an event loop context宏任务在微任务之前工作。
发布于 2019-03-14 22:42:47
Macrotasks在其他microtasks之前被处理,但在宏任务完成之后,所有调度的微任务都将运行。其推论是,如果已经调度了一些微任务,则两个宏任务不能相继运行。
您当前的JS循环运行(在其中运行Promise和setTimeout)实际上是一个Macrotask。Promise调度微任务,setTimeout调度宏任务。
当当前脚本结束时,Macrotask将结束,运行时将查看微任务队列。它解析Promise,如果从这次运行中没有调度其他微任务,它将运行下一个Macrotask。在您的示例中,这是setTimeout方法。
https://stackoverflow.com/questions/55164822
复制相似问题