fs.readFile の非同期の性質を理解する
Node.js でファイル システム操作を扱う場合、非同期の性質を理解することが重要ですfs.readFileの。同期関数とは異なり、非同期関数は別のスレッドで実行されるため、メイン スレッドは操作の完了を待たずに続行できます。
次のコード スニペットに示すように、これにより予期しない結果が生じる可能性があります。
<code class="js">var content; fs.readFile('./Index.html', function read(err, data) { if (err) { throw err; } content = data; }); console.log(content); // Logs undefined, why?</code>
この問題は、非同期コールバック関数の読み取りが完了する前に console.log が実行されるために発生します。その結果、コンテンツはロギング時に未定義のままです。
非同期性への対処
この問題を解決するには、fs の非同期の性質を考慮することが不可欠です。 .readFile。これを処理するには、いくつかの方法があります。
コード例:
ネストされたコールバックの使用:
<code class="js">fs.readFile('./Index.html', function read(err, data) { if (err) { throw err; } console.log(data); });</code>
個別の関数の使用:
<code class="js">function readAndPrintFile() { fs.readFile('./Index.html', function read(err, data) { if (err) { throw err; } console.log(data); }); } readAndPrintFile();</code>
Promise の使用 (ES2017):
<code class="js">const fsPromises = require('fs/promises'); fsPromises.readFile('./Index.html') .then((data) => console.log(data)) .catch((err) => console.error(err));</code>
以上がNode.js で `fs.readFile` を使用すると、`console.log(content)` が `unknown` をログに記録するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。