node.js - try - ¿Cómo leer el archivo con async/await correctamente?
node js await catch (2)
No puedo entender cómo funciona async / await . Lo entiendo un poco, pero no puedo hacer que funcione.
function loadMonoCounter() {
fs.readFileSync("monolitic.txt", "binary", async function(err, data) {
return await new Buffer( data);
});
}
module.exports.read = function() {
console.log(loadMonoCounter());
};
Sé que podría usar readFileSync , pero si lo hago, sé que nunca entenderé async / wait y simplemente resolveré el problema.
Objetivo: llamar a loadMonoCounter () y devolver el contenido de un archivo.
Ese archivo se incrementa cada vez que se llama a incrementMonoCounter () (cada carga de página). El archivo contiene el volcado de un búfer en binario y se almacena en un SSD.
No importa lo que haga, recibo un error o no estoy definido en la consola.
Dado que Node v11.0.0 las promesas de fs están disponibles de forma nativa sin
promisify
:
const fs = require(''fs'').promises;
async function loadMonoCounter() {
const data = await fs.readFile("monolitic.txt", "binary");
return new Buffer(data);
}
Para usar
await
/
async
necesita métodos que devuelvan promesas.
Las funciones principales de la API no lo hacen sin envoltorios como
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);
})
Como nota,
readFileSync
no recibe una devolución de llamada, devuelve los datos o genera una excepción.
No está obteniendo el valor que desea porque esa función que proporciona se ignora y no está capturando el valor de retorno real.