测验

setTimeout()、setImmediate() 和 process.nextTick() 之间有什么区别?

主题
Web APIJavaScript
在GitHub上编辑

TL;DR

setTimeout() 安排在最短延迟后运行回调。setImmediate() 安排在当前事件循环完成后运行回调。process.nextTick() 安排在下一个事件循环迭代开始之前运行回调。

setTimeout(() => console.log('setTimeout'), 0);
setImmediate(() => console.log('setImmediate'));
process.nextTick(() => console.log('nextTick'));

在此示例中,process.nextTick() 将首先执行,然后是 setTimeout()setImmediate(),具体取决于环境。


setTimeout()setImmediate()process.nextTick() 之间的区别

setTimeout()

setTimeout() 是一个函数,它安排在指定的延迟(以毫秒为单位)后执行回调。在现代浏览器和 Node.js 中,最短延迟大约为 4 毫秒。

setTimeout(() => {
console.log('Executed after at least 1000 milliseconds');
}, 1000);

setImmediate()

setImmediate() 是 Node.js 中可用的一个函数,它安排在当前事件循环阶段完成后立即执行回调。它类似于延迟为 0 的 setTimeout(),但对于立即执行,它更有效。

setImmediate(() => {
console.log('Executed after the current event loop phase');
});

process.nextTick()

process.nextTick() 是 Node.js 中可用的一个函数,它安排在下一个事件循环迭代开始之前执行回调。它用于将函数的执行推迟到当前操作完成。

process.nextTick(() => {
console.log('Executed before the next event loop iteration');
});

执行顺序

以下示例演示了这些函数的执行顺序:

setTimeout(() => console.log('setTimeout'), 0);
setImmediate(() => console.log('setImmediate'));
process.nextTick(() => console.log('nextTick'));

在此示例中,输出将是:

nextTick
setTimeout or setImmediate (order may vary)
setImmediate or setTimeout (order may vary)

process.nextTick() 将始终首先执行,然后是 setTimeout()setImmediate(),具体取决于环境。

延伸阅读

在GitHub上编辑