Ich kann nicht herausfinden, wie async
/ await
funktioniert. Ich verstehe es leicht, aber ich kann es nicht zum Laufen bringen.
function loadMonoCounter() {
fs.readFileSync("monolitic.txt", "binary", async function(err, data) {
return await new Buffer( data);
});
}
module.exports.read = function() {
console.log(loadMonoCounter());
};
Ich weiß, dass ich es gebrauchen könnte readFileSync
, aber wenn ich es tue, weiß ich, dass ich es nie verstehen werde async
/ await
und ich werde das Problem einfach begraben.
Ziel: Rufen Sie loadMonoCounter()
den Inhalt einer Datei auf und geben Sie ihn zurück.
Diese Datei wird bei jedem incrementMonoCounter()
Aufruf (bei jedem Laden der Seite) inkrementiert . Die Datei enthält den Speicherauszug eines Puffers in Binärform und wird auf einer SSD gespeichert.
Egal was ich mache, ich bekomme eine Fehlermeldung oder undefined
in der Konsole.
node.js
asynchronous
readfile
Jeremy Dicaire
quelle
quelle
Antworten:
Um
await
/ zu verwendenasync
, benötigen Sie Methoden, die Versprechen zurückgeben. Die Kern-API-Funktionen tun dies nicht ohne Wrapper wiepromisify
:Hinweis:
readFileSync
Nimmt keinen Rückruf entgegen, gibt die Daten zurück oder löst eine Ausnahme aus. Sie erhalten nicht den gewünschten Wert, da die von Ihnen bereitgestellte Funktion ignoriert wird und Sie den tatsächlichen Rückgabewert nicht erfassen.quelle
async
/await
, daher ist dies ein notwendiger Schritt. Die gute Nachricht istpromisify
normalerweise, dass es ohne Probleme funktioniert.const file = await readFile...; return file;
.Seit Node v11.0.0 sind fs-Versprechen nativ verfügbar ohne
promisify
:quelle
import { promises as fs } from "fs";
Wenn Sie die Importsyntax verwenden möchten.Dies ist die TypeScript-Version von @ Joels Antwort. Es kann nach Knoten 11.0 verwendet werden:
quelle
Sie können den Befehl readFile einfach mit einem Versprechen wie folgt umschließen:
dann benutze:
quelle
Sie können
fs.promises
verfügbar nativ seit Node v11.0.0 verwendenquelle
const fs = require('fs').promises
Es gibt eine
fs.readFileSync( path, options )
Methode, die synchron ist.quelle