请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

关于event loop的机制

老师我这里有一个问题向您,有三个部分
#1.设置一个settimeout(fn1,0)
#2.执行一万行代码(就很多很多代码让执行的过程就可能要一两秒)
#3.在上面代码执行完之后,执行一个Promise.resolve().then(fn2),
首选我想知道在这种情况的执行情况?
然后为什么会造成这种结果,整个过程是怎么样的?

正在回答 回答被采纳积分+3

3回答

fstgshow 2021-03-21 23:43:14
function fn1 () {
    console.log('fun1');
}
function fn2 () {
    console.log('fun2');
}
setTimeout(fn1,0)
for(var i = 0; i< 10000000000; i++) {
 // 我试了试这个执行大约5s,反正远远大于2s
}
Promise.resolve().then(fn2)

结果就是先等待循环完成,再去打印f2,然后打印f1;
setTimeout 在“等待区”等待同步任务完成,then()是微任务优先执行,然后在执行setTimeout

0 回复 有任何疑惑可以回复我~
慕粉3871079 2021-03-11 16:23:37

同步和异步的过程是不会互相影响的。同步的代码执行了很久可能10秒,你做了个定时器是1秒,那1秒后会把你异步的回调放到同步代码后面,你可以仔细去看老师的那个图。10000行代码放到call stack中,1秒后把异步回调放到callback queue中等待event loop去执行它。当call stack中所有的代码执行完后,触发了event loop,把异步回调推到call stack,执行。

0 回复 有任何疑惑可以回复我~
双越 2021-03-01 08:34:41

fn1 是啥?fn2 是啥?把示例代码写出来吧。

一万行代码可以省略,注视一下

0 回复 有任何疑惑可以回复我~
  • function fn1 () {
        console.log('fun1');
    }
    function fn2 () {
        console.log('fun2');
    }
    setTimeout(fn1,0)
    for(var i = 0; i< 10000000000; i++) {
    
    }
    Promise.resolve().then(fn2)
    他说的可能是类似这个情况的代码
    回复 有任何疑惑可以回复我~ 2021-03-21 23:44:57
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信