event loop

事件循环和任务队列
  • 浏览器中展现如下

程序执行时,先执行主程序,执行主程序时。如果发现有setTimeout或者setInterval,或者发送http请求等,这些异步的代码就会创建其他的异步对象,只是创建对象但是暂不执行。

定时器:当定时器等待时间结束时,回调函数自动执行

小黄人:xhr.onreadyStatechang

e,当响应结果回来时自动执行

当他们满足执行条件时,都不能立刻进入主线程执行,而是进入了任务队列/回调队列

当主线程空了的时候,事件循环一直盯着主线程,就从任务队列中按顺序取出回调函数。队列这里,是先进的回调函数先执行,后进的回调函数后执行

promise比较特殊

promise中的then不会进入到异步对象中创建,then会进入任务队列中的微任务。所有promise中的then的回调函数都会进入微任务中等待执行。

then中的回调函数会比其他的异步操作提前执行

面试题

setTimeout(()=>console.log('a'),0)
var p=new Promise(resolve=>{
    console.log('b')
resolve()
})
p.then(()=>{console.log('c')})
console.log('e')
/// 结果是b e c a
  • 在node中

node中多一个process.nextTick,process.nextTick进入微队列,且优先级高于then

process.nextTick(()=>{console.log(9)})
new Promise((resolve)=>{
  console.log(3)
  resolve()
  console.log(4)
}).then(function(){
  console.log(6)
})
process.nextTick(function(){
  console.log(7)
})
// 结果是 3 4 9 7 6
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值