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 utilizar readFileSync, pero si lo hago, sé que nunca voy a entender async/ awaity voy a enterrar el asunto.
Objetivo: llamar loadMonoCounter()y devolver el contenido de un archivo.
Ese archivo se incrementa cada vez que incrementMonoCounter()se llama (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, aparece un error o undefineden la consola.
node.js
asynchronous
readfile
Jeremy Dicaire
fuente
fuente

Respuestas:
Para usar
await/asyncnecesita métodos que devuelvan promesas. Las funciones principales de la API no hacen eso sin envoltorios comopromisify:Como nota,
readFileSyncno acepta una devolución de llamada, devuelve los datos o lanza una excepción. No obtiene el valor que desea porque la función que proporciona se ignora y no está capturando el valor de retorno real.fuente
async/await, por lo que es un paso necesario. La buena noticia es que,promisifypor lo general, hace que funcione sin problemas.const file = await readFile...; return file;.Dado que las promesas de Node v11.0.0 fs están disponibles de forma nativa sin
promisify:fuente
import { promises as fs } from "fs";si desea utilizar la sintaxis de importación.Esta es la versión TypeScript de la respuesta de @ Joel. Se puede usar después del Nodo 11.0:
fuente
Puede envolver fácilmente el comando readFile con una promesa como esta:
luego usa:
fuente
Puede usar
fs.promisesdisponible de forma nativa desde Node v11.0.0fuente
const fs = require('fs').promisesHay un
fs.readFileSync( path, options )método que es sincrónico.fuente