import.defer()
Eingeschränkt verfügbar
Diese Funktion ist nicht Baseline, da sie in einigen der am weitesten verbreiteten Browser nicht funktioniert.
Want more browser support for this feature? Tell us why.
Experimentell: Dies ist eine experimentelle Technologie
Überprüfen Sie die Browser-Kompatibilitätstabelle sorgfältig vor der Verwendung auf produktiven Webseiten.
Die import.defer()-Syntax verhält sich wie die reguläre import()-Syntax, gibt jedoch ein verzögertes Modul-Namespace-Objekt zurück. Das Modul und seine Abhängigkeiten werden vorab geladen und verknüpft, ihre synchrone Auswertung wird jedoch aufgeschoben, bis auf Eigenschaften des Namespace zugegriffen wird.
Weitere Informationen zur verzögerten Auswertung, einschließlich ihres Zusammenspiels mit await auf oberster Ebene, finden Sie unter der Deklarationsform import defer.
Syntax
import.defer(moduleName)
import.defer(moduleName, options)
import.defer() ist eine spezielle Syntax (eine „Meta-Eigenschaft“) und keine Methode eines import-Objekts.
Parameter
Siehe import().
Rückgabewert
Gibt ein Promise zurück, das mit einem verzögerten Modul-Namespace-Objekt erfüllt wird, nachdem der Modulgraph geladen und verknüpft wurde und alle sofort ausgewerteten Abhängigkeiten mit await auf oberster Ebene vollständig ausgewertet wurden.
Wie bei der regulären import()-Syntax wird das Promise zurückgewiesen, wenn das Modul oder seine Abhängigkeiten nicht geladen, geparst oder verknüpft werden können. Es wird auch zurückgewiesen, wenn ein sofort ausgewertetes Modul eine Ausnahme auslöst. Fehler aus einer Auswertung, die aufgeschoben bleibt, werden stattdessen synchron durch die Operation auf dem Namespace ausgelöst, die die Auswertung anstößt.
Beispiele
>import.defer() verwenden
Hinweis:
Es ist garantiert, dass beim Abwarten des zurückgegebenen Promise niemals versehentlich eine exportierte then-Methode aufgerufen wird – ein Fallstrick beim regulären Modul-Namespace-Objekt –, da das verzögerte Modul-Namespace-Objekt niemals eine Eigenschaft namens then bereitstellt.
const ts = await import.defer("typescript");
function compilePath(path) {
// Evaluation of the typescript module subgraph starts here
const program = ts.createProgram([path], {});
}
Destrukturieren Sie den zurückgegebenen Namespace niemals unmittelbar, da dies die Auswertung auslöst:
const { createProgram } = await import.defer("typescript");
// The typescript module has now been evaluated.
Spezifikationen
| Spezifikation |
|---|
| Deferred Imports Evaluation> # sec-left-hand-side-expressions> |