关于浏览器事件循环和node事件循环一些疑问,求解答
发布于 5 年前 作者 15537839367 5323 次浏览 来自 问答

setTimeout(()=>{ console.log(‘timer1’) Promise.resolve().then(function() { console.log(‘promise1’) }) }, 0) setTimeout(()=>{ console.log(‘timer2’) Promise.resolve().then(function() { console.log(‘promise2’) }) }, 0) 浏览器端:timer1=>promise1=>timer2=>promise2 自己运行,这个结果没疑问; 理论node端: timer1=>timer2=>promise1=>promise2 为啥实际运行却是和浏览器一样的结果:timer1=>promise1=>timer2=>promise2

3 回复

不仅仅是node版本的问题,不同版本的不同浏览器表现也不一样的哟

从你使用setTimeout 0开始,你就要遗忘掉代码执行顺序了,这会让你按顺序执行来思考问题,而不是从一个异步的过程来思考问题,这是一个很危险思考方式。 不管是浏览器还是Node都没有承诺过,setTimeout 0会按顺序执行,甚至都没有承诺过,setTimeout 0 会在0s之后就开始执行。 我们通常这么做只是为了暂时释放掉CPU的时间,或想将当前的栈释放掉,从而减轻内存压力。

回到顶部