Nie mogę dowiedzieć się, jak async
/ await
działa. Trochę to rozumiem, ale nie mogę tego zrobić.
function loadMonoCounter() {
fs.readFileSync("monolitic.txt", "binary", async function(err, data) {
return await new Buffer( data);
});
}
module.exports.read = function() {
console.log(loadMonoCounter());
};
Wiem, że mógłbym użyć readFileSync
, ale jeśli to zrobię, wiem, że nigdy nie zrozumiem async
/ await
i po prostu zakopię problem.
Cel: Zadzwoń loadMonoCounter()
i zwróć zawartość pliku.
Ten plik jest zwiększany za każdym razem, gdy incrementMonoCounter()
jest wywoływany (przy każdym ładowaniu strony). Plik zawiera zrzut bufora w postaci binarnej i jest przechowywany na dysku SSD.
Bez względu na to, co zrobię, pojawia się błąd lub undefined
w konsoli.
node.js
asynchronous
readfile
Jeremy Dicaire
źródło
źródło
Odpowiedzi:
Aby użyć
await
/async
potrzebujesz metod, które zwracają obietnice. Podstawowe funkcje API nie robią tego bez opakowań takich jakpromisify
:Uwaga:
readFileSync
nie przyjmuje wywołania zwrotnego, zwraca dane lub zgłasza wyjątek. Nie otrzymujesz żądanej wartości, ponieważ funkcja, którą podasz, jest ignorowana i nie przechwytujesz rzeczywistej wartości zwracanej.źródło
async
/await
, więc jest to niezbędny krok. Dobra wiadomość jest taka,promisify
że zwykle działa bez bałaganu.const file = await readFile...; return file;
.Od czasu Node v11.0.0 obietnice FS są dostępne natywnie bez
promisify
:źródło
import { promises as fs } from "fs";
jeśli chcesz użyć składni importu.To jest wersja odpowiedzi @ Joela w języku TypeScript. Można go używać po Węzeł 11.0:
źródło
Możesz łatwo opakować polecenie readFile obietnicą taką jak ta:
następnie użyj:
źródło
Możesz używać
fs.promises
dostępnych natywnie od wersji Node 11.0.0źródło
const fs = require('fs').promises
Jest
fs.readFileSync( path, options )
metoda, która jest synchroniczna.źródło