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
/ await
y 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 undefined
en la consola.
node.js
asynchronous
readfile
Jeremy Dicaire
fuente
fuente
Respuestas:
Para usar
await
/async
necesita métodos que devuelvan promesas. Las funciones principales de la API no hacen eso sin envoltorios comopromisify
:Como nota,
readFileSync
no 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,promisify
por 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.promises
disponible de forma nativa desde Node v11.0.0fuente
const fs = require('fs').promises
Hay un
fs.readFileSync( path, options )
método que es sincrónico.fuente