// `nextTick()` will not enqueue any callback when the process is about to // exit since the callback would not have a chance to be executed. function nextTick(callback) { if (typeof callback !== 'function') throw new ERR_INVALID_CALLBACK(callback); if (process._exiting) return; var args; switch (arguments.length) { case 1: break; case 2: args = [arguments[1]]; break; case 3: args = [arguments[1], arguments[2]]; break; case 4: args = [arguments[1], arguments[2], arguments[3]]; break; default: args = new Array(arguments.length - 1); for (var i = 1; i < arguments.length; i++) args[i - 1] = arguments[i]; } if (queue.isEmpty()) setHasTickScheduled(true); queue.push(new TickObject(callback, args, getDefaultTriggerAsyncId())); }
// Flags: --expose-internals 'use strict'; require('../common'); const assert = require('assert'); const FixedQueue = require('internal/fixed_queue'); { const queue = new FixedQueue(); assert.strictEqual(queue.head, queue.tail); assert(queue.isEmpty()); queue.push('a'); assert(!queue.isEmpty()); assert.strictEqual(queue.shift(), 'a'); assert.strictEqual(queue.shift(), null); } { const queue = new FixedQueue(); for (let i = 0; i < 2047; i++) queue.push('a'); assert(queue.head.isFull()); queue.push('a'); assert(!queue.head.isFull()); assert.notStrictEqual(queue.head, queue.tail); for (let i = 0; i < 2047; i++) assert.strictEqual(queue.shift(), 'a'); assert.strictEqual(queue.head, queue.tail); assert(!queue.isEmpty());