求问下面代码,为什么then比同步2先输出?
javascript吧
全部回复
仅看楼主
level 1
闲副 楼主
<script type="text/javascript">
// 宏任务 微任务 执
console.log("同步1")
//宏任务
setTimeout(()=>{
console.log("setTimeout");
//宏任务里定义微任务
new Promise(resolve=>{
console.log("setTimeout Promise");
resolve();
}).then(console.log("setTimeout then"));
},100);
// 微任务
new Promise(resolve=>{
setTimeout(()=>{
console.log("Promise");
resolve();
},1000);}
).then(console.log("then"));
console.log("同步2")
</script>
then不应该在同步2后输出吗?
2022年09月07日 02点09分 1
level 4
因为你的then的参数console.log("then"),是个立即执行函数,而不是函数 ()=>console.log("then")
2022年09月07日 06点09分 3
也就是说Promise和then方法的参数如果传的不是回调函数,里面的代码会立即执行是这样的吧。
2022年09月07日 08点09分
@闲副 new Promise传递的参数是函数,而且是同步的,then传递的回调实际上是resolve触发后,要调取函数,也就是说then传递的回调函数,其实是提前保存了,在resolve后拿到了并执行,你直接给个console.log("then"),这叫执行语句,在代码运行时就直接执行了,想存放也存放不了
2022年09月09日 02点09分
1