Die adopt()
Methode von DisposableStack
Instanzen registriert einen Wert, der das disposable Protokoll nicht implementiert, auf dem Stack, indem eine benutzerdefinierte Dispose-Funktion bereitgestellt wird.
value
Beliebiger Wert, der auf dem Stack registriert werden soll.
onDispose
Eine Funktion, die aufgerufen wird, wenn der Stack entsorgt wird. Die Funktion erhält value
als einziges Argument.
Der gleiche value
, der übergeben wurde.
TypeError
Wird ausgelöst, wenn onDispose
keine Funktion ist.
ReferenceError
Wird ausgelöst, wenn der Stack bereits entsorgt ist.
Der Hauptzweck von adopt()
ist es, einen Wert zu registrieren, der das disposable Protokoll nicht implementiert. Wenn der Wert bereits disposable ist, können Sie stattdessen use()
verwenden, welches automatisch die [Symbol.dispose]()
Methode des Wertes als Disposer nutzt.
adopt(value, onDispose)
ist fast das gleiche wie defer(() => onDispose(value))
, aber es ermöglicht Ihnen, die Ressource zu deklarieren und auf derselben Zeile zu registrieren. Auf diese Weise gibt es minimalen Spielraum für Fehler zwischen der Erstellung und Registrierung der Ressource, was dazu führen könnte, dass die Ressource verloren geht.
using disposer = new DisposableStack();
const reader = disposer.adopt(stream.getReader(), (reader) =>
reader.releaseLock(),
);
using disposer = new DisposableStack();
const reader = stream.getReader();
// If someone adds code in between these lines and an error occurs,
// the stream will be locked forever.
disposer.defer(() => reader.close());
Im gleichen Sinne des "Registrieren Sie Ihre Ressource, sobald sie deklariert ist", sollten Sie immer Ihren Ressourcenerwerbsausdruck in adopt()
einwickeln, anstatt ihn in eine separate Anweisung auszulagern.
using disposer = new DisposableStack();
const reader = stream.getReader();
disposer.adopt(reader, (reader) => reader.close());
Beispiele Nutzung von adopt()
Dieses Codebeispiel konsumiert einen ReadableStream
über einen ReadableStreamDefaultReader
. Der Reader implementiert das disposable Protokoll nicht, daher nutzen wir adopt()
, um ihn auf dem Stack zu registrieren.
{
using disposer = new DisposableStack();
const reader = disposer.adopt(stream.getReader(), (reader) =>
reader.releaseLock(),
);
const { value, done } = reader.read();
if (!done) {
// Process the value
}
// The reader.releaseLock() method is called here before exiting
}
Spezifikationen Browser-Kompatibilität Siehe auch
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