await() auf oberster Ebene ohne async()⇒{…} in NodeJs
So funktioniert die async-await-Funktion normalerweise:
function myDummyBackendCall() {
return new Promise((resolve) => {
setTimeout(() => {
resolve({
name: "Shivang",
id: "asmdhajkdhajdsh8qweuqoweuiqepoi-0q-0eueiuaisjdaKcjaisku",
});
});
});
}
// Used an async wrapper function to make an await call
(async () => {
let data = await myDummyBackendCall();
console.log(data);
})();
Lassen Sie uns nun über ein anderes Szenario sprechen:
Hier ist ein weiteres Beispiel meiner index.js-Datei in meinem NodeJs-Projekt, in dem ich meinen awaitAufruf nicht in eine asyncFunktion eingeschlossen habe (die von mir verwendete Node-Version ist 19.3.0):
function myDummyBackendCall() {
return new Promise((resolve) => {
setTimeout(() => {
resolve({
name: "Shivang",
id: "asmdhajkdhajdsh8qweuqoweuiqepoi-0q-0eueiuaisjdaKcjaisku",
});
});
});
}
//Note that there is no async wrapper function
let data = await myDummyBackendCall();
console.log(data);
// Output of node index.js
{
name: 'Shivang',
id: 'asmdhajkdhajdsh8qweuqoweuiqepoi-0q-0eueiuaisjdaKcjaisku'
}
{
"name": "src",
"version": "1.0.0",
"description": "",
"main": "index.js",
"type":"module", // I'm here!
"scripts": {
"test": "echo \\"Error: no test specified\\" && exit 1"
},
"author": "",
"license": "ISC"
}
Innerhalb eines package.json, weist “type”der Wert von “module”NodeJs an, die Dateien mit der .jsErweiterung so zu interpretieren, dass sie die ES-Modulsyntax verwenden, z. B.: importAnweisung oder import()Ausdrücke.
“type” definiert, wie die NodeJ-Laufzeit Spezifizierer auflösen oder Module laden soll.
Es gibt zwei mögliche Werte für “type”config:
- Modul
- commonjs (Standard)
Hier ist der Beispielcode (ohne typeKonfiguration):
{
"name": "src",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \\"Error: no test specified\\" && exit 1"
},
"author": "",
"license": "ISC"
}
Hier ist der Code darin index.mjs(genau derselbe Code wie oben):
function myDummyBackendCall() {
return new Promise((resolve) => {
setTimeout(() => {
resolve({
name: "Shivang",
id: "asmdhajkdhajdsh8qweuqoweuiqepoi-0q-0eueiuaisjdaKcjaisku",
});
});
});
}
console.log(await myDummyBackendCall());
Hier sind einige Punkte direkt aus der offiziellen NodeJs-Dokumentation :
- Dateien, die mit enden,
.mjswerden immer als ES-Module geladen, unabhängig vom nächsten übergeordneten Elementpackage.json. - Dateien, die mit enden,
.cjswerden immer als CommonJS geladen, unabhängig vom nächsten übergeordneten Elementpackage.json.
Dies funktioniert nur, wenn awaitauf der obersten Ebene von Modulen aufgerufen wird. Hier ist eine Illustration:
Der ECMAScript-Modullader ist asynchron . Dies bedeutet, dass das Warten auf oberster Ebene dem Modul ermöglicht, sich wie eine BIG-asynchrone Funktion zu verhalten, wenn NodeJs es als ES-Modul lädt. Daher benötigt das Erwarten auf oberster Ebene keinen expliziten Wrapper für asynchrone Funktionen. Es bedeutet auch, dass ein await ohne async ein Mythos ist!
Haftungsausschluss:
Dies ist eine reine NodeJs-Funktion. Es gibt kein Konzept von .mjsund .cjsin Vanilla JavaScript.
Danksagung ❤️
Vielen Dank für Ihren Besuch. Ich hoffe, Sie finden diesen Artikel nützlich. Wenn ja, folgen Sie mir bitte auf Medium. Das wird mich wirklich ermutigen, mehr Inhalte zu veröffentlichen.
PS: Wenn Sie der Meinung sind, dass etwas verbessert werden kann oder eine angemessene Erklärung fehlt, schreiben Sie mir eine Nachricht in das Kommentarfeld oder senden Sie mir eine E-Mail an [email protected] . Schließlich kannst du mir auch das ein oder andere beibringen.

![Was ist überhaupt eine verknüpfte Liste? [Teil 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































