callback{Function}...args{any} 当调用callback时传入的额外参数。
process.nextTick() 会添加 callback 到下一个时间点队列。
在 JavaScript 堆栈上的当前操作运行完成之后,且允许事件循环继续之前,此队列会被完全耗尽。
如果递归地调用 process.nextTick(),则可以创建无限的循环。
有关更多背景信息,请参见[事件循环][Event Loop]指南。
console.log('开始');process.nextTick(() => {console.log('下一个时间点的回调');});console.log('调度');// 输出:// 开始// 调度// 下一个时间点的回调
这在开发 API 时非常重要,可以在构造对象之后但在发生任何 I/O 之前,为用户提供分配事件句柄的机会:
function MyThing(options) {this.setupOptions(options);process.nextTick(() => {this.startDoingStuff();});}const thing = new MyThing();thing.getReadyForStuff();// thing.startDoingStuff() 现在(而不是在之前)会被调用。
对于 100% 同步或 100% 异步的 API,此方法也非常重要。 参考以下示例:
// 警告!不要这样使用!这是不安全的!function maybeSync(arg, cb) {if (arg) {cb();return;}fs.stat('file', cb);}
此 API 是不安全的,因为在以下情况中:
const maybeTrue = Math.random() > 0.5;maybeSync(maybeTrue, () => {foo();});bar();
不清楚 foo() 和 bar() 哪个会先被调用。
以下方法则更好:
function definitelyAsync(arg, cb) {if (arg) {process.nextTick(cb);return;}fs.stat('file', cb);}
