为了账号安全,请及时绑定邮箱和手机立即绑定

UI渲染和JS执行先后问题

UI渲染和JS执行先后问题

MM们 2019-05-12 09:13:09
beginsetTimeout(function(){alert('ui已经渲染完毕了吗?');console.log('timeout1');newPromise(function(resolve){console.log('promise3');resolve();console.log('promise4');}).then(function(){alert('为什么这里ui已经渲染成finally了');console.log('then2');})div.innerHTML='finally';})newPromise(function(resolve){console.log('promise1');resolve();console.log('promise2');}).then(function(){console.log('then1');alert('ui开始渲染');})console.log('global1');div.innerHTML='end';ui在第一个事件循环之后innerHTML渲染成end我能理解,进入settimeout之后为什么渲染在微任务之前执行
查看完整描述

2 回答

?
慕斯709654

TA贡献1840条经验 获得超5个赞

因为Promise是个异步的操作。你的.then()本质上就是一个callback回调函数。执行完newPromise()之后,仅仅给你返回一个句柄,然后继续往下执行div.innerHTML='finally';。
js本来就是异步的。你想按正常的人脑逻辑执行的话,用async/await去做。但async本质上还是promise
                            
查看完整回答
反对 回复 2019-05-12
?
泛舟湖上清波郎朗

TA贡献1818条经验 获得超3个赞

虽然在超时调用中,但本质是不会变的,newpromise()异步的,和同步放在一起当然是同步先执行,虽然说promise是解决回调深渊问题的,但还是会进行一个异步操作,.then()返回结果。补充一句,业务逻辑的问题,你最好自己亲自调试下。
                            
查看完整回答
反对 回复 2019-05-12
  • 2 回答
  • 0 关注
  • 672 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信