【问题标题】:setTimeout before setImmediatesetImmediate 之前的 setTimeout
【发布时间】:2016-05-30 18:51:57
【问题描述】:

此代码显示 setTimeout 在 setImmediate 之前。为什么会这样?我认为所有 setImmediates 都在 setTimeouts 之前运行。

setImmediate(function() {
    console.log("i");
});

setTimeout(function() {
    console.log("t");
}, 0);

var i;
for (i = 0 ; i < 3000000000 ; ++i) {}

【问题讨论】:

  • 这是在节点上运行的吗?或者哪个浏览器?
  • 在节点 v5.2.0 中运行

标签: javascript asynchronous timeout settimeout


【解决方案1】:

根据NodeJS Event Loop docs:

如果两者都是从主模块中调用的,那么时间将受到进程性能的限制(可能会受到机器上运行的其他应用程序的影响)。

但是在某些情况下确实会发生这种行为:如果您在一个 I/O 周期内移动两个调用,则始终首先执行立即回调:

// timeout_vs_immediate.js
const fs = require('fs');

fs.readFile(__filename, () => {
  setTimeout(() => {
    console.log('timeout');
  }, 0);
  setImmediate(() => {
    console.log('immediate');
  });
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-30
    • 2014-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-02
    • 1970-01-01
    相关资源
    最近更新 更多