1. ホーム
  2. node.js

[解決済み】async/awaitでファイルを正しく読み込むには?

2022-04-20 01:55:46

質問

がわかりません。 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 の場合、プロミスを返すメソッドが必要です。コアAPIの関数は、以下のようなラッパーを使わないと、そのようなことはしません。 promisify :

const fs = require('fs');
const util = require('util');

// Convert fs.readFile into Promise version of same    
const readFile = util.promisify(fs.readFile);

function getStuff() {
  return 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 はコールバックを受け取らず、データを返すか例外を投げます。あなたが提供したその関数が無視され、実際の戻り値をキャプチャしていないため、あなたは望む値を得ることができません。