fs: use createDeferredPromise() in promises.watch()

This commit updates fsPromises.watch() to use the
createDeferredPromise() utility.

PR-URL: https://github.com/nodejs/node/pull/37386
Reviewed-By: Michaël Zasso <targos@protonmail.com>
Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Darshan Sen <raisinten@gmail.com>
This commit is contained in:
cjihrig
2021-02-15 12:32:20 -05:00
parent 3bf50a70b4
commit 9a2ac2c615

View File

@@ -4,7 +4,6 @@ const {
FunctionPrototypeCall,
ObjectDefineProperty,
ObjectSetPrototypeOf,
Promise,
Symbol,
} = primordials;
@@ -15,6 +14,7 @@ const {
ERR_INVALID_ARG_VALUE,
},
} = require('internal/errors');
const { createDeferredPromise } = require('internal/util');
const {
kFsStatsFieldsNumber,
@@ -319,21 +319,14 @@ async function* watch(filename, options = {}) {
throw new AbortError();
const handle = new FSEvent();
let res;
let rej;
let { promise, resolve, reject } = createDeferredPromise();
const oncancel = () => {
handle.close();
rej(new AbortError());
reject(new AbortError());
};
try {
signal?.addEventListener('abort', oncancel, { once: true });
let promise = new Promise((resolve, reject) => {
res = resolve;
rej = reject;
});
handle.onchange = (status, eventType, filename) => {
if (status < 0) {
const error = uvException({
@@ -343,11 +336,11 @@ async function* watch(filename, options = {}) {
});
error.filename = filename;
handle.close();
rej(error);
reject(error);
return;
}
res({ eventType, filename });
resolve({ eventType, filename });
};
const err = handle.start(path, persistent, recursive, encoding);
@@ -366,10 +359,7 @@ async function* watch(filename, options = {}) {
while (!signal?.aborted) {
yield await promise;
promise = new Promise((resolve, reject) => {
res = resolve;
rej = reject;
});
({ promise, resolve, reject } = createDeferredPromise());
}
throw new AbortError();
} finally {