node.js Wie lese ich Dateien mit async/await richtig?




asynchronous readfile (2)

Ich kann nicht herausfinden, wie async / await funktioniert. Ich verstehe es ein wenig, 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 readFileSync verwenden könnte , aber wenn ich das tue, verstehe ich Async / Warten nie und begrabe das Problem nur.

Ziel: loadMonoCounter () aufrufen und den Inhalt einer Datei zurückgeben.

Diese Datei wird jedes Mal inkrementiert, wenn incrementMonoCounter () aufgerufen wird (bei jedem Laden der Seite). Die Datei enthält den Speicherauszug eines Puffers in binärer Form und wird auf einer SSD gespeichert.

Egal was ich mache, ich bekomme einen Fehler oder undefiniert in der Konsole.


Seit Node v11.0.0 sind fs-Versprechen von Haus aus ohne Versprechen verfügbar:

const fs = require('fs').promises;
async function loadMonoCounter() {
    const data = await fs.readFile("monolitic.txt", "binary");
    return new Buffer(data);
}

Um await / async , benötigen Sie Methoden, die Versprechungen zurückgeben. Die Kernfunktionen der API machen das nicht ohne Wrapper wie promisify :

const fs = require('fs');
const util = require('util');

// Convert fs.readFile into Promise version of same    
const readFile = util.promisify(fs.readFile);

async function getStuff() {
  return await readFile('test');
}

// Can't use `await` outside of an async function so you need to chain
// with then()
getStuff().then(data => {
  console.log(data);
})

Als Hinweis nimmt readFileSync 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 angegebene Funktion ignoriert wird und Sie nicht den tatsächlichen Rückgabewert erfassen.







readfile