diff --git a/doc/api/fs.md b/doc/api/fs.md index cd9632c4ee1..8681d5c6606 100644 --- a/doc/api/fs.md +++ b/doc/api/fs.md @@ -861,7 +861,8 @@ added: > Stability: 1 - Experimental -An alias for `filehandle.close()`. +Calls `filehandle.close()` and returns a promise that fulfills when the +filehandle is closed. ### `fsPromises.access(path[, mode])` @@ -6745,7 +6746,8 @@ added: REPLACEME > Stability: 1 - Experimental -An alias for `dir.close()`. +Calls `dir.close()` and returns a promise that fulfills when the +dir is closed. #### `dir[Symbol.Dispose]()` @@ -6755,7 +6757,7 @@ added: REPLACEME > Stability: 1 - Experimental -An alias for `dir.closeSync()`. +Calls `dir.closeSync()` and returns `undefined`. ### Class: `fs.Dirent` diff --git a/lib/_http_server.js b/lib/_http_server.js index 015a4335d93..a7ef03a1ce0 100644 --- a/lib/_http_server.js +++ b/lib/_http_server.js @@ -581,7 +581,7 @@ Server.prototype.close = function close() { }; Server.prototype[SymbolAsyncDispose] = assignFunctionName(SymbolAsyncDispose, async function() { - return promisify(this.close).call(this); + await promisify(this.close).call(this); }); Server.prototype.closeAllConnections = function closeAllConnections() { diff --git a/lib/dgram.js b/lib/dgram.js index 44f4e4298ad..02394161521 100644 --- a/lib/dgram.js +++ b/lib/dgram.js @@ -800,7 +800,7 @@ Socket.prototype[SymbolAsyncDispose] = async function() { if (!this[kStateSymbol].handle) { return; } - return FunctionPrototypeCall(promisify(this.close), this); + await FunctionPrototypeCall(promisify(this.close), this); }; diff --git a/lib/https.js b/lib/https.js index 69cbf1cf7a2..aaf5d22de66 100644 --- a/lib/https.js +++ b/lib/https.js @@ -117,7 +117,7 @@ Server.prototype.close = function close() { }; Server.prototype[SymbolAsyncDispose] = async function() { - return FunctionPrototypeCall(promisify(this.close), this); + await FunctionPrototypeCall(promisify(this.close), this); }; /** diff --git a/lib/internal/fs/dir.js b/lib/internal/fs/dir.js index 149ec171b50..7cc1477abca 100644 --- a/lib/internal/fs/dir.js +++ b/lib/internal/fs/dir.js @@ -21,7 +21,12 @@ const { } = require('internal/errors'); const { FSReqCallback } = binding; -const internalUtil = require('internal/util'); +const { + assignFunctionName, + promisify, + SymbolAsyncDispose, + SymbolDispose, +} = require('internal/util'); const { getDirent, getOptions, @@ -31,10 +36,6 @@ const { validateFunction, validateUint32, } = require('internal/validators'); -const { - SymbolAsyncDispose, - SymbolDispose, -} = internalUtil; class Dir { #handle; @@ -61,9 +62,9 @@ class Dir { validateUint32(this.#options.bufferSize, 'options.bufferSize', true); this.#readPromisified = FunctionPrototypeBind( - internalUtil.promisify(this.#readImpl), this, false); + promisify(this.#readImpl), this, false); this.#closePromisified = FunctionPrototypeBind( - internalUtil.promisify(this.close), this); + promisify(this.close), this); } get path() { @@ -306,12 +307,16 @@ ObjectDefineProperties(Dir.prototype, { [SymbolDispose]: { __proto__: null, ...nonEnumerableDescriptor, - value: Dir.prototype.closeSync, + value: assignFunctionName(SymbolDispose, function() { + this.closeSync(); + }), }, [SymbolAsyncDispose]: { __proto__: null, ...nonEnumerableDescriptor, - value: Dir.prototype.close, + value: assignFunctionName(SymbolAsyncDispose, function() { + this.close(); + }), }, [SymbolAsyncIterator]: { __proto__: null, diff --git a/lib/internal/fs/promises.js b/lib/internal/fs/promises.js index 75926d48bea..80e1aa42a87 100644 --- a/lib/internal/fs/promises.js +++ b/lib/internal/fs/promises.js @@ -272,7 +272,7 @@ class FileHandle extends EventEmitter { }; async [SymbolAsyncDispose]() { - return this.close(); + await this.close(); } /** diff --git a/lib/internal/http2/core.js b/lib/internal/http2/core.js index b6504eefaf3..c15852ca4f1 100644 --- a/lib/internal/http2/core.js +++ b/lib/internal/http2/core.js @@ -3342,7 +3342,7 @@ class Http2Server extends NETServer { } async [SymbolAsyncDispose]() { - return promisify(super.close).call(this); + await promisify(super.close).call(this); } } diff --git a/lib/internal/readline/interface.js b/lib/internal/readline/interface.js index 91dfcb641eb..a076799a890 100644 --- a/lib/internal/readline/interface.js +++ b/lib/internal/readline/interface.js @@ -47,7 +47,11 @@ const { validateString, validateUint32, } = require('internal/validators'); -const { SymbolDispose, kEmptyObject } = require('internal/util'); +const { + assignFunctionName, + kEmptyObject, + SymbolDispose, +} = require('internal/util'); const { inspect, getStringWidth, @@ -1370,7 +1374,9 @@ class Interface extends InterfaceConstructor { return this[kLineObjectStream]; } } -Interface.prototype[SymbolDispose] = Interface.prototype.close; +Interface.prototype[SymbolDispose] = assignFunctionName(SymbolDispose, function() { + this.close(); +}); module.exports = { Interface, diff --git a/lib/internal/streams/readable.js b/lib/internal/streams/readable.js index 3079474b026..d02f595fa32 100644 --- a/lib/internal/streams/readable.js +++ b/lib/internal/streams/readable.js @@ -371,13 +371,13 @@ Readable.prototype[EE.captureRejectionSymbol] = function(err) { this.destroy(err); }; -Readable.prototype[SymbolAsyncDispose] = function() { +Readable.prototype[SymbolAsyncDispose] = async function() { let error; if (!this.destroyed) { error = this.readableEnded ? null : new AbortError(); this.destroy(error); } - return new Promise((resolve, reject) => eos(this, (err) => (err && err !== error ? reject(err) : resolve(null)))); + await new Promise((resolve, reject) => eos(this, (err) => (err && err !== error ? reject(err) : resolve(null)))); }; // Manually shove something into the read() buffer. diff --git a/lib/internal/streams/writable.js b/lib/internal/streams/writable.js index b74b6088201..a3a1a965b00 100644 --- a/lib/internal/streams/writable.js +++ b/lib/internal/streams/writable.js @@ -1151,13 +1151,13 @@ Writable.toWeb = function(streamWritable) { return lazyWebStreams().newWritableStreamFromStreamWritable(streamWritable); }; -Writable.prototype[SymbolAsyncDispose] = function() { +Writable.prototype[SymbolAsyncDispose] = async function() { let error; if (!this.destroyed) { error = this.writableFinished ? null : new AbortError(); this.destroy(error); } - return new Promise((resolve, reject) => + await new Promise((resolve, reject) => eos(this, (err) => (err && err.name !== 'AbortError' ? reject(err) : resolve(null))), ); }; diff --git a/lib/net.js b/lib/net.js index 7cd2e47eb10..8019c5a4be8 100644 --- a/lib/net.js +++ b/lib/net.js @@ -2395,7 +2395,7 @@ Server.prototype[SymbolAsyncDispose] = async function() { if (!this._handle) { return; } - return FunctionPrototypeCall(promisify(this.close), this); + await FunctionPrototypeCall(promisify(this.close), this); }; Server.prototype._emitCloseIfDrained = function() {