DisposableStack.prototype.use()
The use()
method of DisposableStack
instances registers a value that implements the disposable protocol to the stack.
Syntax
use(value)
Parameters
value
-
The value to register to the stack. Must either contain a
[Symbol.dispose]()
method, or benull
orundefined
.
Return value
The same value
that was passed in.
Exceptions
TypeError
-
Thrown if
value
is notnull
orundefined
, and does not contain a[Symbol.dispose]()
method. ReferenceError
-
Thrown if the stack is already disposed.
Description
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
No specification found
No specification data found for javascript.builtins.DisposableStack.use
.
Check for problems with this page or contribute a missing spec_url
to mdn/browser-compat-data. Also make sure the specification is included in w3c/browser-specs.