你是否因为一直没弄懂事件轮询而一直懊恼??
你是否在网上搜遍了各种回答、解析,不是字数太多没耐心读完 就是代码太复杂看起来有些吃力?
你是否一直在找能简单的把大体意思讲明白,知道大约怎么用就行了的回答?
没错 你找到我了!
先把万变不离其宗经典面试题 先展示给你 结果直接就是后面的数字的正确顺序 满足你立即想知道答案的急切心理
setTimeout(_ => console.log(4))
new Promise(resolve => {
resolve()
console.log(1)
}).then(_ => {
console.log(3)
})
console.log(2)
// 在这里 第一个执行的同步代码为 1 第二个执行的同步代码为2 然后 3为微任务 4为宏任务 所以结果为1234
先死背这几点:
1.先执行同步代码再执行异步代码
2.先执行微任务再执行宏任务
常见宏任务: setTimeout 、setInterva、I/O , io 简单理解为输入输出流 上传文件 点击按钮这些与程序之间产生交互的勉强理解为I/O
常见微任务:process.nextTick 、 Promise.then 、catch、finally
所有会进入的异步都是指的事件回调中的那部分代码
在同步代码执行完成后才回去检查是否有异步任务完成,并执行对应的回调,而微任务又会在宏任务之前执行。
还有一点关于promise需要啰嗦一下:
promise本身是同步的 它里面的then才是异步的 这个需要搞明白
另外如果有人问 promise主要目的是做什么的
记住:是解决回调地狱的 它的直接作用就是把多层的嵌套回调,变成一长串的.then()方法的链式调用,主要作用就是方便。
事件轮询:轮流询问 宏任务队列 和 微任务队列
事件轮询.png