Top-level await
La possibilità di usare await direttamente al livello superiore di un modulo ES, senza dover racchiuderlo in una funzione async. Il modulo resta «in pausa» finché l'await non termina, e i moduli che lo importano attendono a loro volta: utile per l'inizializzazione asincrona.
Il vecchio problema: await era utilizzabile solo dentro funzioni async, quindi l'inizializzazione asincrona a livello di modulo richiedeva espedienti poco eleganti (una funzione async autoinvocata, oppure l'esportazione di una promise). Il top-level await (ES2022, nei moduli) permette di scrivere direttamente const db = await openDatabase(). Il meccanismo: il modulo diventa «asincrono», la sua esecuzione si sospende all'await e tutti i moduli che lo importano aspettano il completamento prima di partire, il che dà un ordinamento pulito delle dipendenze asincrone.
Casi d'uso: aprire una connessione a un database, caricare una configurazione o un modulo WASM, scegliere una dipendenza in modo dinamico, prima che le esportazioni siano pronte. Attenzione: ritarda tutti i moduli dipendenti, quindi va usato con giudizio, perché può rallentare l'avvio. Solo nei moduli ES, non in CommonJS. Imparentato con ES modules nel browser e import dinamico.