FinalizationRegistry.prototype.unregister()

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since April 2021.

Die unregister()-Methode von FinalizationRegistry-Instanzen meldet einen Zielwert von diesem FinalizationRegistry ab.

Syntax

js
unregister(unregisterToken)

Parameter

unregisterToken

Das Token, das mit der register()-Methode beim Registrieren des Zielwerts verwendet wurde. Mehrere Zellen, die mit demselben unregisterToken registriert sind, werden zusammen abgemeldet.

Rückgabewert

Ein boolescher Wert, der true ist, wenn mindestens eine Zelle abgemeldet wurde, und false, wenn keine Zelle abgemeldet wurde.

Ausnahmen

TypeError

Wird ausgelöst, wenn unregisterToken kein Objekt oder ein nicht registriertes Symbol ist.

Beschreibung

Wenn ein Zielwert zurückgewonnen wurde, ist er nicht mehr im Registry registriert. Es ist nicht notwendig, unregister in Ihrem Bereinigungs-Callback aufzurufen. Rufen Sie unregister nur auf, wenn Sie kein Bereinigungs-Callback erhalten haben und keines mehr benötigen.

Beispiele

Verwendung von unregister

Dieses Beispiel zeigt, wie ein Zielobjekt registriert wird, indem dasselbe Objekt als Abmeldetoken verwendet wird, und wie es später über unregister abgemeldet wird:

js
class Thingy {
  static #cleanup = (label) => {
    //               ^^^^^−−−−− held value
    console.error(
      `The "release" method was never called for the object with the label "${label}"`,
    );
  };
  #registry = new FinalizationRegistry(Thingy.#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
  }
}

Dieses Beispiel zeigt, wie ein Zielobjekt unter Verwendung eines anderen Objekts als Abmeldetoken registriert wird:

js
class Thingy {
  static #cleanup = (file) => {
    //               ^^^^−−−−− held value
    console.error(
      `The "release" method was never called for the "Thingy" for the file "${file.name}"`,
    );
  };
  #registry = new FinalizationRegistry(Thingy.#cleanup);
  #file;

  /**
   * 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;
    }
  }
}

Spezifikationen

Specification
ECMAScript Language Specification
# sec-finalization-registry.prototype.unregister

Browser-Kompatibilität

BCD tables only load in the browser

Siehe auch