一直以来,我都搞不清楚微任务,宏任务。
settimeout,async,await,promise的区别。
今天看了myy的播客网站,有了自己的理解。
settimout,setinterval这些都属于宏任务。宏任务是浏览器端立即执行的任务。
promise的resolve(),reject()就属于微任务,在宏任务执行完之后再执行微任务。
那么,来个例子:
1.
console.log('script start')
setTimeout(
function(){console.log(12344)},1000
)
console.log('script end')
> "script start" > "script end" > 12344
2.
console.log('script start')
const promise1=new Promise(function(resolve)
{
console.log('promise1');
resolve();
console.log('promise1 end')
}).then( function(){console.log('promise2')})
setTimeout(function(){console.log('settimeout')},0)
console.log('script end')
结果为: "script start"
> "promise1"
> "promise1 end"
> "script end"
> "promise2"
> "settimeout"
解析:promise.then()是一个回调函数task. promise是resolved或者reject,这个task会被放入当前事件循环回合的微任务中。
settimeout回调也是一个任务,它会被放入宏任务,即使是0S。