为什么setTimeout没有在预期的时间执行?

时间:2017-09-25 17:12:38

标签: node.js settimeout

setTimeout(function(){
    console.log('hari');
    process.exit()
}, 300);

for(i=0;i<3000000;i++) {
    console.log(i);
}

请解释为什么setTimeout在300毫秒内没有完成。 setTimeout仅在for循环完成后执行;为什么呢?

2 个答案:

答案 0 :(得分:0)

正如您可能已经知道的那样,Node.js正在使用单线程的V8(JavaScript)引擎。 I / O执行的核心是事件循环;当你阻止事件循环时,它也会阻止其他事件的执行。

基本上,for循环之前执行,它开始阻塞事件循环。 setTimeout并不保证您的代码在300毫秒后完全执行,但更像是>= 300 ms。为了更好地理解事件循环read this

答案 1 :(得分:-1)

基本上,您的代码在单个线程中运行。 setTimeout的优先级低于标准代码,因此它将首先执行然后(因为线程将完成)它将从setTimeout执行您的函数。

setTimeout(milliseconds)运行函数的速度不会超过指定的毫秒数。