• callback {Function}
    • ...args {any} 当调用 callback 时传入的额外参数。

    process.nextTick() 会添加 callback 到下一个时间点队列。 在 JavaScript 堆栈上的当前操作运行完成之后,且允许事件循环继续之前,此队列会被完全耗尽。 如果递归地调用 process.nextTick(),则可以创建无限的循环。 有关更多背景信息,请参见[事件循环][Event Loop]指南。

    1. console.log('开始');
    2. process.nextTick(() => {
    3. console.log('下一个时间点的回调');
    4. });
    5. console.log('调度');
    6. // 输出:
    7. // 开始
    8. // 调度
    9. // 下一个时间点的回调

    这在开发 API 时非常重要,可以在构造对象之后但在发生任何 I/O 之前,为用户提供分配事件句柄的机会:

    1. function MyThing(options) {
    2. this.setupOptions(options);
    3. process.nextTick(() => {
    4. this.startDoingStuff();
    5. });
    6. }
    7. const thing = new MyThing();
    8. thing.getReadyForStuff();
    9. // thing.startDoingStuff() 现在(而不是在之前)会被调用。

    对于 100% 同步或 100% 异步的 API,此方法也非常重要。 参考以下示例:

    1. // 警告!不要这样使用!这是不安全的!
    2. function maybeSync(arg, cb) {
    3. if (arg) {
    4. cb();
    5. return;
    6. }
    7. fs.stat('file', cb);
    8. }

    此 API 是不安全的,因为在以下情况中:

    1. const maybeTrue = Math.random() > 0.5;
    2. maybeSync(maybeTrue, () => {
    3. foo();
    4. });
    5. bar();

    不清楚 foo()bar() 哪个会先被调用。

    以下方法则更好:

    1. function definitelyAsync(arg, cb) {
    2. if (arg) {
    3. process.nextTick(cb);
    4. return;
    5. }
    6. fs.stat('file', cb);
    7. }