FinalizationRegistry.prototype.unregister()
The unregister()
method unregisters a target object from a
FinalizationRegistry
instance.
Syntax
unregister(unregisterToken);
Parameters
unregisterToken
-
The token used with the
register
method when registering the target object.
Return value
undefined
.
Notes
When a target object has been reclaimed, it is no longer registered in the registry.
There is no need to call unregister
in your cleanup callback. Only call
unregister
if you haven't received a cleanup callback and no longer need
to receive one.
Examples
Using unregister
This example shows registering a target object using that same object as the unregister
token, then later unregistering it via unregister
:
class Thingy {
#cleanup = label => {
// ^^^^^βββββ held value
console.error(
`The \`release\` method was never called for the object with the label "${label}"`
);
};
#registry = new FinalizationRegistry(this.#cleanup);
/**
* Constructs a `Thingy` instance. Be sure to call `release` when you're done with it.
*
* @param label A label for the `Thingy`.
*/
constructor(label) {
// vvvvvβββββ held value
this.#registry.register(this, label, this);
// target βββββ^^^^ ^^^^βββββ unregister token
}
/**
* Releases resources held by this `Thingy` instance.
*/
release() {
this.#registry.unregister(this);
// ^^^^βββββ unregister token
}
}
This example shows registering a target object using a different object as its unregister token:
{
// ^^^^βββββ held value
console.error(
`The \`release\` method was never called for the \`Thingy\` for the file "${file.name}"`
);
};
#registry = new FinalizationRegistry(this.#cleanup);
/**
* Constructs a `Thingy` instance for the given file. Be sure to call `release` when you're done with it.
*
* @param filename The name of the file.
*/
constructor(filename) {
this.#file = File.open(filename);
// vvvvvβββββ held value
this.#registry.register(this, label, this.#file);
// target βββββ^^^^ ^^^^^^^^^^βββββ unregister token
}
/**
* Releases resources held by this `Thingy` instance.
*/
release() {
if (this.#file) {
this.#registry.unregister(this.#file);
// ^^^^^^^^^^βββββ unregister token
File.close(this.#file);
this.#file = null;
}
}
}
Specifications
Specification |
---|
ECMAScript Language Specification # sec-finalization-registry.prototype.unregister |
Browser compatibility
BCD tables only load in the browser