Não consigo descobrir como async
/ await
funciona. Eu entendo um pouco, mas não consigo fazer funcionar.
function loadMonoCounter() {
fs.readFileSync("monolitic.txt", "binary", async function(err, data) {
return await new Buffer( data);
});
}
module.exports.read = function() {
console.log(loadMonoCounter());
};
Sei que poderia usar readFileSync
, mas se usar , sei que nunca vou entender async
/ await
e vou simplesmente enterrar o problema.
Objetivo: Ligar loadMonoCounter()
e retornar o conteúdo de um arquivo.
Esse arquivo é incrementado toda vez que incrementMonoCounter()
é chamado (a cada carregamento de página). O arquivo contém o dump de um buffer em binário e é armazenado em um SSD.
Não importa o que eu faça, recebo um erro undefined
no console.
node.js
asynchronous
readfile
Jeremy Dicaire
fonte
fonte
Respostas:
Para usar
await
/async
você precisa de métodos que retornam promessas. As funções principais da API não fazem isso sem wrappers comopromisify
:Como uma observação,
readFileSync
não recebe um retorno de chamada, ele retorna os dados ou lança uma exceção. Você não está obtendo o valor desejado porque a função fornecida é ignorada e você não está capturando o valor de retorno real.fonte
async
/await
, portanto, essa é uma etapa necessária. A boa notícia é quepromisify
geralmente funciona sem problemas.const file = await readFile...; return file;
.Desde Node v11.0.0 fs promessas estão disponíveis nativamente sem
promisify
:fonte
import { promises as fs } from "fs";
se você quiser usar a sintaxe de importação.Esta é a versão TypeScript da resposta de @Joel. É utilizável após o Nó 11.0:
fonte
Você pode facilmente envolver o comando readFile com uma promessa como esta:
então use:
fonte
Você pode usar o
fs.promises
disponível nativamente desde o Node v11.0.0fonte
const fs = require('fs').promises
Existe um
fs.readFileSync( path, options )
método que é síncrono.fonte