The use()
method of DisposableStack
instances registers a value that implements the disposable protocol to the stack.
value
The value to register to the stack. Must either contain a [Symbol.dispose]()
method, or be null
or undefined
.
The same value
that was passed in.
TypeError
Thrown if value
is not null
or undefined
, and does not contain a [Symbol.dispose]()
method.
ReferenceError
Thrown if the stack is already disposed.
The primary purpose of use()
is to register a value that implements the disposable protocol to the stack, as the equivalent of the using
declaration. If the value does not implement the disposable protocol (it doesn't have the [Symbol.dispose]()
method), use adopt()
instead, passing a callback that calls the resource's cleanup method.
You should make your resource registered as soon as it's declared. This means you should always wrap your resource acquisition expression in use()
, instead of extracting it to a separate statement.
using disposer = new DisposableStack();
const reader = stream.getReader();
disposer.use(reader);
Examples Using use()
This code consumes a ReadableStream
via a ReadableStreamDefaultReader
. The reader is automatically closed when the function completes, assuming it implements an [Symbol.dispose]()
method that synchronously releases the lock on the stream.
{
using disposer = new DisposableStack();
const reader = disposer.use(stream.getReader());
const { value, done } = reader.read();
if (!done) {
// Process the value
}
// The reader.releaseLock() method is called here before exiting
}
Specifications Browser compatibility See also
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4