NodeJS - setTimeout(fn,0)vs setImmediate(fn)

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (11)

这两者有什么区别,我什么时候才能使用另一个?

提问于
用户回答回答于

我认为Navya S的答案不正确,这是我的测试代码:

let set = new Set();

function orderTest() {
  let seq = [];
  let add = () => set.add(seq.join());
  setTimeout(function () {
    setTimeout(function () {
      seq.push('setTimeout');
      if (seq.length === 2) add();
    }, 0);

    setImmediate(function () {
      seq.push('setImmediate');
      if (seq.length === 2) add();
    });
  }, 10);
}

// loop 100 times
for (let i = 0; i < 100; i++) {
  orderTest();
}

setTimeout(() => {
  // will print one or two items, it's random
  for (item of set) {
    console.log(item);
  }
}, 100);

解释在这里

用户回答回答于

setImmediate()用于在I / O事件回调之后以及setTimeout和setInterval之前安排立即执行回调。

setTimeout()用于在延迟毫秒后安排执行一次性回调。

这就是文件所说的。

setTimeout(function() {
  console.log('setTimeout')
}, 0)

setImmediate(function() {
  console.log('setImmediate')
})

如果你运行上面的代码,结果将是这样的...即使当前的文档声明“在I / O事件回调之后以及在setTimeout和setInterval之前安排”立即“执行回调。” ..

结果..

的setTimeout setImmediate

如果将示例包装在另一个计时器中,它总是打印setImmediate,后跟setTimeout。

setTimeout(function() {
  setTimeout(function() {
    console.log('setTimeout')
  }, 0);
  setImmediate(function() {
    console.log('setImmediate')
  });
}, 10);

所属标签

可能回答问题的人

  • 西风

    renzha.net · 站长 (已认证)

    9 粉丝1 提问5 回答
  • uncle_light

    5 粉丝518 提问3 回答
  • 学生

    2 粉丝477 提问3 回答
  • 军哥

    重庆雷驰信息技术有限公司 · 经理 (已认证)

    5 粉丝1 提问3 回答

扫码关注云+社区

领取腾讯云代金券