浏览器环境下,异步任务分macroTask和microTask
宏任务macroTask:script中代码、setTimeout、setInterval、I/O、UI render
微任务microTask:Promise.then、Object.observer、MutationObserver
在浏览器中初始认为执行线程中没有代码,每一个<script>中的代码是一个独立的MacroTask,即会执行前面<script>中创建的microTask再执行后面<script>中的同步代码;
如果microTask一直被添加,则会继续执行microTask,卡死macroTask;
部分浏览器执行顺序可能与上述情况不符合,可能是不符合标准,或者是js与HTML部分标准冲突。
promise的then和catch才是microTask,本身内部代码不是。