Я не могу понять, как async
/ await
работает. Я немного понимаю, но не могу заставить работать.
function loadMonoCounter() {
fs.readFileSync("monolitic.txt", "binary", async function(err, data) {
return await new Buffer( data);
});
}
module.exports.read = function() {
console.log(loadMonoCounter());
};
Я знаю, что могу использовать readFileSync
, но если я это сделаю, я знаю, что никогда не пойму async
/ await
и я просто похороню проблему.
Цель: вызвать loadMonoCounter()
и вернуть содержимое файла.
Этот файл увеличивается каждый раз при incrementMonoCounter()
вызове (при каждой загрузке страницы). Файл содержит дамп буфера в двоичном формате и хранится на SSD.
Что бы я ни делал, у меня вылетает ошибка или undefined
в консоли.
node.js
asynchronous
readfile
Джереми Дикэр
источник
источник
Ответы:
Для использования
await
/async
вам нужны методы, возвращающие обещания. Основные функции API не делают этого без таких оболочек, какpromisify
:В качестве примечания,
readFileSync
он не принимает обратный вызов, он возвращает данные или выдает исключение. Вы не получаете желаемое значение, потому что эта функция, которую вы предоставляете, игнорируется, и вы не фиксируете фактическое возвращаемое значение.источник
async
/await
, так что это необходимый шаг. Хорошая новость в том,promisify
что она обычно работает без проблем.const file = await readFile...; return file;
.Поскольку Node v11.0.0 fs promises изначально доступен без
promisify
:источник
import { promises as fs } from "fs";
если вы хотите использовать синтаксис импорта.Это TypeScript-версия ответа @Joel. Его можно использовать после Node 11.0:
источник
Вы можете легко обернуть команду readFile таким обещанием:
затем используйте:
источник
Вы можете использовать
fs.promises
доступный изначально, начиная с Node v11.0.0источник
const fs = require('fs').promises
Есть
fs.readFileSync( path, options )
метод, который синхронный.источник