diff --git a/doc/api/fs.md b/doc/api/fs.md index 28be2559bfe..1d0ce57fc1b 100644 --- a/doc/api/fs.md +++ b/doc/api/fs.md @@ -863,7 +863,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])` @@ -6757,7 +6758,8 @@ added: v24.1.0 > 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]()` @@ -6767,7 +6769,7 @@ added: v24.1.0 > 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 e6baccbe099..b728f73c419 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 b4c5db64397..163f2139e7a 100644 --- a/lib/dgram.js +++ b/lib/dgram.js @@ -802,7 +802,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 53f03d1a7b6..acd3252b5cd 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 ead08110f13..349d0fa2dbb 100644 --- a/lib/internal/fs/dir.js +++ b/lib/internal/fs/dir.js @@ -23,7 +23,10 @@ const { } = require('internal/errors'); const { FSReqCallback } = binding; -const internalUtil = require('internal/util'); +const { + assignFunctionName, + promisify, +} = require('internal/util'); const { getDirent, getOptions, @@ -59,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() { @@ -304,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 be0095660ea..eff9769f907 100644 --- a/lib/internal/fs/promises.js +++ b/lib/internal/fs/promises.js @@ -273,7 +273,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 17ffc3f33e0..358c4f5edeb 100644 --- a/lib/internal/http2/core.js +++ b/lib/internal/http2/core.js @@ -3340,7 +3340,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 6c9e20ac6c6..ccd4073e288 100644 --- a/lib/internal/readline/interface.js +++ b/lib/internal/readline/interface.js @@ -51,7 +51,10 @@ const { validateString, validateUint32, } = require('internal/validators'); -const { kEmptyObject } = require('internal/util'); +const { + assignFunctionName, + kEmptyObject, +} = require('internal/util'); const { inspect, getStringWidth, @@ -1637,7 +1640,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 ca8b4bcc851..d4096a30994 100644 --- a/lib/internal/streams/readable.js +++ b/lib/internal/streams/readable.js @@ -369,13 +369,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 ac14b202b66..1081db9ffcf 100644 --- a/lib/internal/streams/writable.js +++ b/lib/internal/streams/writable.js @@ -1149,13 +1149,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 4d9cc4dd2c4..a391e9da30f 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() {