Skip to content

Commit f2561fd

Browse files
anonrigruyadorno
authored andcommitted
lib: use Promise.withResolvers() in timers
PR-URL: #55720 Reviewed-By: Michaël Zasso <targos@protonmail.com> Reviewed-By: Moshe Atlow <moshe@atlow.co.il> Reviewed-By: Chemi Atlow <chemi@atlow.co.il> Reviewed-By: Luigi Pinca <luigipinca@gmail.com> Reviewed-By: LiviaMedeiros <livia@cirno.name>
1 parent 5844565 commit f2561fd

File tree

1 file changed

+24
-25
lines changed

1 file changed

+24
-25
lines changed

lib/timers/promises.js

+24-25
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ const {
44
FunctionPrototypeBind,
55
Promise,
66
PromiseReject,
7+
PromiseWithResolvers,
78
ReflectConstruct,
89
SafePromisePrototypeFinally,
910
Symbol,
@@ -75,20 +76,19 @@ function setTimeout(after, value, options = kEmptyObject) {
7576
}
7677

7778
let oncancel;
78-
const ret = new Promise((resolve, reject) => {
79-
const timeout = new Timeout(resolve, after, [value], false, ref);
80-
insert(timeout, timeout._idleTimeout);
81-
if (signal) {
82-
oncancel = FunctionPrototypeBind(cancelListenerHandler,
83-
timeout, clearTimeout, reject, signal);
84-
kResistStopPropagation ??= require('internal/event_target').kResistStopPropagation;
85-
signal.addEventListener('abort', oncancel, { __proto__: null, [kResistStopPropagation]: true });
86-
}
87-
});
79+
const { promise, resolve, reject } = PromiseWithResolvers();
80+
const timeout = new Timeout(resolve, after, [value], false, ref);
81+
insert(timeout, timeout._idleTimeout);
82+
if (signal) {
83+
oncancel = FunctionPrototypeBind(cancelListenerHandler,
84+
timeout, clearTimeout, reject, signal);
85+
kResistStopPropagation ??= require('internal/event_target').kResistStopPropagation;
86+
signal.addEventListener('abort', oncancel, { __proto__: null, [kResistStopPropagation]: true });
87+
}
8888
return oncancel !== undefined ?
8989
SafePromisePrototypeFinally(
90-
ret,
91-
() => signal.removeEventListener('abort', oncancel)) : ret;
90+
promise,
91+
() => signal.removeEventListener('abort', oncancel)) : promise;
9292
}
9393

9494
function setImmediate(value, options = kEmptyObject) {
@@ -113,21 +113,20 @@ function setImmediate(value, options = kEmptyObject) {
113113
}
114114

115115
let oncancel;
116-
const ret = new Promise((resolve, reject) => {
117-
const immediate = new Immediate(resolve, [value]);
118-
if (!ref) immediate.unref();
119-
if (signal) {
120-
oncancel = FunctionPrototypeBind(cancelListenerHandler,
121-
immediate, clearImmediate, reject,
122-
signal);
123-
kResistStopPropagation ??= require('internal/event_target').kResistStopPropagation;
124-
signal.addEventListener('abort', oncancel, { __proto__: null, [kResistStopPropagation]: true });
125-
}
126-
});
116+
const { promise, resolve, reject } = PromiseWithResolvers();
117+
const immediate = new Immediate(resolve, [value]);
118+
if (!ref) immediate.unref();
119+
if (signal) {
120+
oncancel = FunctionPrototypeBind(cancelListenerHandler,
121+
immediate, clearImmediate, reject,
122+
signal);
123+
kResistStopPropagation ??= require('internal/event_target').kResistStopPropagation;
124+
signal.addEventListener('abort', oncancel, { __proto__: null, [kResistStopPropagation]: true });
125+
}
127126
return oncancel !== undefined ?
128127
SafePromisePrototypeFinally(
129-
ret,
130-
() => signal.removeEventListener('abort', oncancel)) : ret;
128+
promise,
129+
() => signal.removeEventListener('abort', oncancel)) : promise;
131130
}
132131

133132
async function* setInterval(after, value, options = kEmptyObject) {

0 commit comments

Comments
 (0)