Explicit Resource Management (using)

JavaScript 🔴 Senior

Définition

Le mot-clé using déclare une variable dont la méthode [Symbol.dispose]() est appelée automatiquement à la sortie du bloc ; await using fait de même avec [Symbol.asyncDispose](). La proposition « Explicit Resource Management » est terminée (Stage 4) et figure dans la liste TC39 des propositions attendues pour l'édition ES2027. Elle est déjà livrée dans V8 13.6, donc dans Node.js 24 (6 mai 2025), et TypeScript la compile depuis la 5.2. Équivalent du try-with-resources de Java ou du using de C#.

Analogie

Un robinet auto-coupant : il se ferme tout seul quand tu quittes la pièce, pas besoin de penser a le fermer.

Exemple de code

class Conn {
  [Symbol.dispose]() { console.log('connexion fermée'); }
}
function requete() {
  using db = new Conn();      // libéré à la sortie du bloc
  using pile = new DisposableStack();
  pile.defer(() => console.log('nettoyage différé'));
  return 'ok';
} // ordre inverse : pile puis db
// async : await using s = await ouvrirSocket();

Cas d'usage

Connexions base de données, descripteurs de fichiers, verrous, transactions : tout ce qui exige un nettoyage garanti même en cas d'exception. DisposableStack regroupe plusieurs ressources à libérer dans l'ordre inverse.

Anti-pattern

Utiliser using sur un objet sans [Symbol.dispose] : TypeError à l'exécution. Ignorer SuppressedError, qui agrège l'erreur du bloc et celle survenue pendant la libération.
#core#avance#ES2027#node24

Fiche mise à jour le 2026-09-27

← → au clavier pour passer d'une fiche à l'autre