Skip to content

Commit f90b22d

Browse files
cjihrigMylesBorins
authored andcommitted
util: add internal createDeferredPromise()
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. PR-URL: #37095 Backport-PR-URL: #39704 Reviewed-By: Gus Caplan <me@gus.host> Reviewed-By: Luigi Pinca <luigipinca@gmail.com> Reviewed-By: Michaël Zasso <targos@protonmail.com> Reviewed-By: Zijian Liu <lxxyxzj@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com>
1 parent 72ef41c commit f90b22d

File tree

3 files changed

+16
-18
lines changed

3 files changed

+16
-18
lines changed

lib/child_process.js

+2-7
Original file line numberDiff line numberDiff line change
@@ -28,12 +28,12 @@ const {
2828
ObjectAssign,
2929
ObjectDefineProperty,
3030
ObjectPrototypeHasOwnProperty,
31-
Promise,
3231
} = primordials;
3332

3433
const {
3534
promisify,
3635
convertToValidSignal,
36+
createDeferredPromise,
3737
getSystemErrorName
3838
} = require('internal/util');
3939
const { isArrayBufferView } = require('internal/util/types');
@@ -215,12 +215,7 @@ function exec(command, options, callback) {
215215

216216
const customPromiseExecFunction = (orig) => {
217217
return (...args) => {
218-
let resolve;
219-
let reject;
220-
const promise = new Promise((res, rej) => {
221-
resolve = res;
222-
reject = rej;
223-
});
218+
const { promise, resolve, reject } = createDeferredPromise();
224219

225220
promise.child = orig(...args, (err, stdout, stderr) => {
226221
if (err !== null) {

lib/internal/blob.js

+2-11
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
const {
44
ArrayFrom,
55
ObjectSetPrototypeOf,
6-
Promise,
76
PromiseResolve,
87
RegExpPrototypeTest,
98
StringPrototypeToLowerCase,
@@ -31,6 +30,7 @@ const {
3130
} = require('internal/util/types');
3231

3332
const {
33+
createDeferredPromise,
3434
customInspectSymbol: kInspect,
3535
emitExperimentalWarning,
3636
} = require('internal/util');
@@ -58,15 +58,6 @@ const kLength = Symbol('kLength');
5858

5959
let Buffer;
6060

61-
function deferred() {
62-
let res, rej;
63-
const promise = new Promise((resolve, reject) => {
64-
res = resolve;
65-
rej = reject;
66-
});
67-
return { promise, resolve: res, reject: rej };
68-
}
69-
7061
function lazyBuffer() {
7162
if (Buffer === undefined)
7263
Buffer = require('buffer').Buffer;
@@ -212,7 +203,7 @@ class Blob extends JSTransferable {
212203
promise,
213204
resolve,
214205
reject
215-
} = deferred();
206+
} = createDeferredPromise();
216207
job.ondone = (err, ab) => {
217208
if (err !== undefined)
218209
return reject(new AbortError());

lib/internal/util.js

+12
Original file line numberDiff line numberDiff line change
@@ -420,11 +420,23 @@ function sleep(msec) {
420420
_sleep(msec);
421421
}
422422

423+
function createDeferredPromise() {
424+
let resolve;
425+
let reject;
426+
const promise = new Promise((res, rej) => {
427+
resolve = res;
428+
reject = rej;
429+
});
430+
431+
return { promise, resolve, reject };
432+
}
433+
423434
module.exports = {
424435
assertCrypto,
425436
cachedResult,
426437
convertToValidSignal,
427438
createClassWrapper,
439+
createDeferredPromise,
428440
decorateErrorStack,
429441
deprecate,
430442
emitExperimentalWarning,

0 commit comments

Comments
 (0)