<div id="div">
begin
</div>
<script>
setTimeout(function() {
alert(' ui 已经渲染完毕了吗? ');
console.log('timeout1');
new Promise(function(resolve) {
console.log('promise3');
resolve();
console.log('promise4');
}).then(function() {
alert(' 为什么这里ui已经渲染成finally了 ');
console.log('then2');
})
div.innerHTML = 'finally';
})
new Promise(function(resolve) {
console.log('promise1');
resolve();
console.log('promise2');
}).then(function() {
console.log('then1');
alert(' ui 开始渲染 ');
})
console.log('global1');
div.innerHTML = 'end';
</script>
ui在第一个事件循环之后innerHTML渲染成 end 我能理解,进入settimeout之后为什么渲染在微任务之前执行
因为Promise是个异步的操作。你的.then()本质上就是一个callback回调函数。执行完new Promise() 之后,仅仅给你返回一个句柄,然后继续往下执行
div.innerHTML = 'finally';
。js本来就是异步的。你想按正常的人脑逻辑执行的话,用 async/await 去做。但async本质上还是promise