Comment lire un fichier avec async/await correctement?
Je ne peux pas comprendre comment async/await œuvres. J'ai un peu le comprend mais je ne peux pas le faire fonctionner.
function loadMonoCounter() {
fs.readFileSync("monolitic.txt", "binary", async function(err, data) {
return await new Buffer( data);
});
}
module.exports.read = function() {
console.log(loadMonoCounter());
};
Je sais que je pourrais utiliser readFileSync, mais si je le fais, je sais que je ne comprendrai jamais async/await et je vais enterrer la question.
Objectif: Appel loadMonoCounter() et retourner le contenu d'un fichier.
Que le fichier est incrémenté à chaque fois incrementMonoCounter() est appelé (à chaque chargement de la page). Le fichier contient le dump d'un tampon dans le fichier binaire est stocké sur un disque SSD.
Pas mather ce que je fais, j'obtiens une erreur ou undefined dans la console.
OriginalL'auteur Jeremy Dicaire | 2017-10-21
Vous devez vous connecter pour publier un commentaire.
À utiliser
await
/async
vous avez besoin de méthodes qui retournent des promesses. L'API de base, les fonctions ne font pas le faire sans wrappers commepromisify
:Comme une note,
readFileSync
ne prend pas de rappel, il renvoie les données ou lève une exception. Vous n'obtenez pas la valeur que vous souhaitez parce que la fonction que vous fournissez est ignoré et vous n'êtes pas la capture de la valeur de retour.L'API de base de pré-dates de l'modernes Promesse de spécification et de l'adoption de
async
/await
, de sorte que c'est une étape nécessaire. La bonne nouvelle, c'estpromisify
généralement le fait fonctionner avec pas de gâchis.Cela gère le gâchis de ne pas être en mesure de tirer parti async-attendent avec FS normalement. Merci pour ce! Vous m'avez sauvé une tonne! Il n'y a pas de réponse qui aborde vraiment cela comme la vôtre.
Attendons aussi est un peu redondant, car il peut être inférer. Seulement, si vous ne voulez explicitement attendent dans l'exemple, vous pouvez faire
const file = await readFile...; return file;
.OriginalL'auteur tadman