Top-level await
La possibilité d'utiliser await directement au niveau supérieur d'un module ES, sans l'envelopper dans une fonction async. Le module « fait une pause » jusqu'à la fin de l'await, et les modules qui l'importent l'attendent — pratique pour l'initialisation asynchrone.
Le problème d'autrefois : await n'était permis qu'à l'intérieur de fonctions async, si bien que l'initialisation asynchrone au niveau du module exigeait de vilains détours (une fonction async auto-invoquée, ou l'export d'une promesse). Le top-level await (ES2022, dans les modules) permet d'écrire const db = await openDatabase() directement dans le module. Mécanique : le module devient « asynchrone » — son exécution s'interrompt à l'await, et tous les modules qui l'importent attendent la fin avant de s'exécuter → un ordre propre pour les dépendances asynchrones. Cas d'usage : initialiser une connexion à une base de données, charger une configuration ou un module WASM, ou choisir une dépendance dynamiquement, avant que les exports du module soient prêts. Attention : cela retarde tous les modules dépendants, donc à employer à bon escient (mal utilisé, il peut ralentir le démarrage). Réservé aux modules ES, pas à CommonJS. À rapprocher des modules ES dans le navigateur et de l'import dynamique.