DisposableStack
Limited availability
Cette fonctionnalité n'est pas Compatible car elle ne fonctionne pas dans certains des navigateurs les plus utilisés.
L'objet DisposableStack représente une pile de libérateurs (disposals en anglais) à exécuter lorsque la pile elle-même est libérée (disposed en anglais). Les fonctions de libération sont exécutées dans l'ordre inverse de leur enregistrement, avec de solides garanties de gestion des erreurs. L'appel de sa méthode move() transfère la responsabilité d'appeler les fonctions de libération actuellement enregistrées vers une nouvelle DisposableStack et empêche l'enregistrement de fonctions de libération supplémentaires.
Description
Un DisposableStack n'est pas exactement une « pile » au sens de son interface. Il dispose de plusieurs méthodes pour y empiler des fonctions de libération, mais il n'offre aucun moyen de dépiler une seule fonction. En revanche, toutes les fonctions de libération sont dépilées et exécutées une par une lorsque la pile est libérée.
Vous enregistrez des ressources libérables dans le DisposableStack en utilisant ses méthodes use(), adopt() ou defer().
using disposer = new DisposableStack();
const reader = disposer.use(stream.getReader());
Ensuite, lorsque le disposer sort de la portée, toutes les ressources qui y sont enregistrées sont libérées dans l'ordre inverse de leur enregistrement, sauf si elles ont été déplacées avec move().
Il est recommandé de ne pas extraire l'expression d'acquisition de la ressource dans une instruction séparée, quelle que soit la longueur de l'expression. Vous devez toujours entourer l'appel avec use() ou adopt() autour de l'expression d'acquisition afin de garantir que la ressource est immédiatement enregistrée dans la pile.
using disposer = new DisposableStack();
const reader = stream.getReader();
disposer.use(reader);
D'un point de vue fonctionnel, ces deux extraits de code sont équivalents. Cependant, le premier est moins sujet aux erreurs, car la ressource est déclarée et enregistrée sur une seule ligne. Si quelqu'un insère davantage de code entre la deuxième et la troisième ligne du second extrait, une erreur peut survenir, provoquant une fuite de la ressource.
Constructeur
DisposableStack()-
Crée un nouvel objet
DisposableStack.
Propriétés d'instance
Ces propriétés sont définies sur DisposableStack.prototype et partagées par toutes les instances de DisposableStack.
DisposableStack.prototype.constructor-
La fonction constructeur ayant créé l'objet instance. Pour les instances de
DisposableStack, la valeur initiale est le constructeurDisposableStack. DisposableStack.prototype.disposedLecture seule-
Retourne
truesi laDisposableStacka été libérée, sinonfalse. DisposableStack.prototype[Symbol.toStringTag]-
La valeur initiale de la propriété
[Symbol.toStringTag]est la chaîne de caractères"DisposableStack". Cette propriété est utilisée parObject.prototype.toString().
Méthodes d'instance
DisposableStack.prototype.adopt()-
Enregistre une valeur qui n'implémente pas le protocole de libération dans la pile en fournissant une fonction de libération personnalisée.
DisposableStack.prototype.defer()-
Prend une fonction de rappel à appeler lorsque la pile est libérée.
DisposableStack.prototype.dispose()-
Libère cette pile en appelant toutes les fonctions de libération qui y sont enregistrées dans l'ordre inverse de leur enregistrement.
DisposableStack.prototype.move()-
Crée une nouvelle instance de
DisposableStackcontenant les mêmes fonctions de libération que cette pile, puis marque cette pile comme libérée, sans appeler aucune fonction de libération. DisposableStack.prototype.use()-
Enregistre une valeur qui implémente le protocole de libération dans la pile.
DisposableStack.prototype[Symbol.dispose]-
Un alias de la méthode
dispose().
Spécifications
| Specification |
|---|
| ECMAScript Async Explicit Resource Management> # sec-disposablestack-objects> |
Compatibilité des navigateurs
Voir aussi
- Prothèse d'émulation de
DisposableStackdanscore-js(angl.) - Gestion des ressources JavaScript
- Le symbole
Symbol.dispose - La déclaration
using - L'objet
AsyncDisposableStack