valid try sincronas only node funciones done catch await async node.js asynchronous readfile

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.