Skip to content

Commit

Permalink
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
util: add internal createDeferredPromise()
Browse files Browse the repository at this point in the history
The pattern of resolving/rejecting a Promise from outside of its
executor happens numerous times throughout the codebase (more than
what is updated here in fact). This commit abstracts that logic
into an internal utility function.
cjihrig committed Jan 27, 2021
1 parent 8c9dc4e commit c544a71
Showing 3 changed files with 16 additions and 18 deletions.
9 changes: 2 additions & 7 deletions lib/child_process.js
Original file line number Diff line number Diff line change
@@ -37,7 +37,6 @@ const {
ObjectAssign,
ObjectDefineProperty,
ObjectPrototypeHasOwnProperty,
Promise,
RegExpPrototypeTest,
SafeSet,
StringPrototypeSlice,
@@ -47,6 +46,7 @@ const {
const {
promisify,
convertToValidSignal,
createDeferredPromise,
getSystemErrorName
} = require('internal/util');
const { isArrayBufferView } = require('internal/util/types');
@@ -184,12 +184,7 @@ function exec(command, options, callback) {

const customPromiseExecFunction = (orig) => {
return (...args) => {
let resolve;
let reject;
const promise = new Promise((res, rej) => {
resolve = res;
reject = rej;
});
const { promise, resolve, reject } = createDeferredPromise();

promise.child = orig(...args, (err, stdout, stderr) => {
if (err !== null) {
13 changes: 2 additions & 11 deletions lib/internal/blob.js
Original file line number Diff line number Diff line change
@@ -3,7 +3,6 @@
const {
ArrayFrom,
ObjectSetPrototypeOf,
Promise,
PromiseResolve,
RegExpPrototypeTest,
StringPrototypeToLowerCase,
@@ -29,6 +28,7 @@ const {
} = require('internal/util/types');

const {
createDeferredPromise,
customInspectSymbol: kInspect,
emitExperimentalWarning,
} = require('internal/util');
@@ -56,15 +56,6 @@ const kLength = Symbol('kLength');

let Buffer;

function deferred() {
let res, rej;
const promise = new Promise((resolve, reject) => {
res = resolve;
rej = reject;
});
return { promise, resolve: res, reject: rej };
}

function lazyBuffer() {
if (Buffer === undefined)
Buffer = require('buffer').Buffer;
@@ -210,7 +201,7 @@ class Blob extends JSTransferable {
promise,
resolve,
reject
} = deferred();
} = createDeferredPromise();
job.ondone = (err, ab) => {
if (err !== undefined)
return reject(new AbortError());
12 changes: 12 additions & 0 deletions lib/internal/util.js
Original file line number Diff line number Diff line change
@@ -420,11 +420,23 @@ function sleep(msec) {
_sleep(msec);
}

function createDeferredPromise() {
let resolve;
let reject;
const promise = new Promise((res, rej) => {
resolve = res;
reject = rej;
});

return { promise, resolve, reject };
}

module.exports = {
assertCrypto,
cachedResult,
convertToValidSignal,
createClassWrapper,
createDeferredPromise,
decorateErrorStack,
deprecate,
emitExperimentalWarning,

0 comments on commit c544a71

Please sign in to comment.