setImmediate(callback[, ...args])
callback
<Function> Node.js 事件循环的此回合结束时要调用的函数。...args
<any> 当调用callback
时传入的可选的参数。- 返回: <Immediate> 用于
clearImmediate()
。
安排在 I/O 事件的回调之后立即执行的 callback
。
当多次调用 setImmediate()
时, callback
函数会按它们被创建的顺序放入排队等待执行。
每轮的事件循环迭代都会处理整个回调队列。
如果一个 immediate 定时器是从一个正在执行中的回调内部被放入队列,则该定时器将不会被触发,直到下一轮的事件循环迭代。
如果 callback
不是函数,则抛出 TypeError
。
此方法有一个定制的用于 promise 的变体,使用 util.promisify()
创建:
const util = require('util');
const setImmediatePromise = util.promisify(setImmediate);
setImmediatePromise('foobar').then((value) => {
// value === 'foobar' (传值是可选的)
// 这会在所有的 I/O 回调之后执行。
});
// 或使用异步函数。
async function timerExample() {
console.log('在 I/O 回调之前');
await setImmediatePromise();
console.log('在 I/O 回调之后');
}
timerExample();
callback
<Function> The function to call at the end of this turn of the Node.js Event Loop...args
<any> Optional arguments to pass when thecallback
is called.- Returns: <Immediate> for use with
clearImmediate()
Schedules the "immediate" execution of the callback
after I/O events'
callbacks.
When multiple calls to setImmediate()
are made, the callback
functions are
queued for execution in the order in which they are created. The entire callback
queue is processed every event loop iteration. If an immediate timer is queued
from inside an executing callback, that timer will not be triggered until the
next event loop iteration.
If callback
is not a function, a TypeError
will be thrown.
This method has a custom variant for promises that is available using
util.promisify()
:
const util = require('util');
const setImmediatePromise = util.promisify(setImmediate);
setImmediatePromise('foobar').then((value) => {
// value === 'foobar' (passing values is optional)
// This is executed after all I/O callbacks.
});
// Or with async function
async function timerExample() {
console.log('Before I/O callbacks');
await setImmediatePromise();
console.log('After I/O callbacks');
}
timerExample();