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が表示されます。
await
/async
を使用するには、promiseを返すメソッドが必要です。コアAPI関数は、 promisify
のようなラッパーなしではそれを行いません。
const fs = require('fs');
const util = require('util');
// Convert fs.readFile into Promise version of same
const readFile = util.promisify(fs.readFile);
async function getStuff() {
return await readFile('test');
}
// Can't use `await` outside of an async function so you need to chain
// with then()
getStuff().then(data => {
console.log(data);
})
注として、readFileSync
はコールバックを取得せず、データを返すか、例外をスローします。指定した関数が無視され、実際の戻り値をキャプチャしていないため、目的の値が得られません。
Node v11.0.0 fs promiseは、promisify
なしでネイティブに使用可能です。
const fs = require('fs').promises;
async function loadMonoCounter() {
const data = await fs.readFile("monolitic.txt", "binary");
return new Buffer(data);
}
これは@Joelの答えのTypeScriptバージョンです
import { promises as fs } from 'fs';
async function loadMonoCounter() {
const data = await fs.readFile('monolitic.txt', 'binary');
return Buffer.from(file);
}
main();
ReadFileコマンドは、次のような約束で簡単にラップできます。
async function readFile(path) {
return new Promise((resolve, reject) => {
fs.readFile(path, 'utf8', function (err, data) {
if (err) {
reject(err);
}
resolve(data);
});
});
}
次に使用します:
await readFile("path/to/file");