◐ Shell
clean mode source ↗

process: optimize asyncHandledRejections by using FixedQueue · nodejs/node@37d49f3

11

'use strict';

2233

const {

4-

ArrayPrototypePush,

5-

ArrayPrototypeShift,

64

Error,

75

ObjectPrototypeHasOwnProperty,

86

SafeMap,

97

SafeWeakMap,

108

} = primordials;

11910+

const FixedQueue = require('internal/fixed_queue');

11+1212

const {

1313

tickInfo,

1414

promiseRejectEvents: {

@@ -142,9 +142,9 @@ const maybeUnhandledPromises = new SafeWeakMap();

142142

let pendingUnhandledRejections = new SafeMap();

143143144144

/**

145-

* @type {Array<{promise: Promise, warning: Error}>}

145+

* @type {import('internal/fixed_queue')<{promise: Promise, warning: Error}>}

146146

*/

147-

const asyncHandledRejections = [];

147+

const asyncHandledRejections = new FixedQueue();

148148149149

/**

150150

* @type {number}

@@ -281,7 +281,7 @@ function handledRejection(promise) {

281281

if (promiseInfo.warned) {

282282

// Generate the warning object early to get a good stack trace.

283283

const warning = new PromiseRejectionHandledWarning(promiseInfo.uid);

284-

ArrayPrototypePush(asyncHandledRejections, { promise, warning });

284+

asyncHandledRejections.push({ promise, warning });

285285

setHasRejectionToWarn(true);

286286

}

287287

}

@@ -437,10 +437,10 @@ function getUnhandledRejectionsMode() {

437437

// a warning to be emitted which requires the microtask and next tick

438438

// queues to be drained again.

439439

function processPromiseRejections() {

440-

let maybeScheduledTicksOrMicrotasks = asyncHandledRejections.length > 0;

440+

let maybeScheduledTicksOrMicrotasks = !asyncHandledRejections.isEmpty();

441441442-

while (asyncHandledRejections.length !== 0) {

443-

const { promise, warning } = ArrayPrototypeShift(asyncHandledRejections);

442+

while (!asyncHandledRejections.isEmpty()) {

443+

const { promise, warning } = asyncHandledRejections.shift();

444444

if (!process.emit('rejectionHandled', promise)) {

445445

process.emitWarning(warning);

446446

}