[解決済み] fs.readFileからデータを取得する
2022-03-17 14:47:48
質問
var content;
fs.readFile('./Index.html', function read(err, data) {
if (err) {
throw err;
}
content = data;
});
console.log(content);
ログ
undefined
なぜですか?
どのように解決するのですか?
Raynos が言ったことを詳しく説明すると、あなたが定義した関数は、非同期コールバックです。すぐに実行されるわけではなく、ファイルの読み込みが完了した時点で実行されます。readFileを呼ぶと、すぐに制御が戻され、次の行が実行されます。つまり、console.logを呼び出したときには、まだコールバックは起動されておらず、このコンテンツはまだ設定されていないのです。非同期プログラミングへようこそ。
アプローチ例
const fs = require('fs');
// First I want to read the file
fs.readFile('./Index.html', function read(err, data) {
if (err) {
throw err;
}
const content = data;
// Invoke the next step here however you like
console.log(content); // Put all of the code here (not the best solution)
processFile(content); // Or put the next step in a function and invoke it
});
function processFile(content) {
console.log(content);
}
あるいは、Raynosの例が示すように、呼び出しを関数でラップし、独自のコールバックを渡すのがより良い方法です。(非同期呼び出しをコールバックを受け取る関数でラップする習慣を身につけると、多くのトラブルや面倒なコードを省くことができると思います(どうやらこの方が良いようです)。
function doSomething (callback) {
// any async callback invokes callback with response
}
doSomething (function doSomethingAfter(err, result) {
// process the async result
});
関連
-
Uncaught TypeError: null のプロパティ 'offsetHeight' を読み取れませんでした。
-
[解決済み] 配列から特定の項目を削除するにはどうすればよいですか?
-
[解決済み] JavaScriptでタイムスタンプを取得する方法は?
-
[解決済み] JavaScriptで現在のURLを取得する?
-
[解決済み] JavaScriptで現在の日付を取得するには?
-
[解決済み] JavaScriptでクエリ文字列の値を取得するにはどうすればよいですか?
-
[解決済み] jQueryを使ってドロップダウンリスト(セレクトボックス)から選択されたテキストを取得する
-
[解決済み] .prop() vs .attr()
-
[解決済み] JSONPとは何か、なぜ作られたのか?
-
[解決済み】オブジェクトからプロパティを削除する(JavaScript)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
JSクロスドメインソリューション リアクト構成 リバースプロキシ
-
JavaScriptにおけるマクロタスクとミクロタスクの詳細
-
jsを使った簡単な照明スイッチのコード
-
jQueryのコピーオブジェクトの説明
-
JavaScriptのクロージャの説明
-
vue ディレクティブ v-html と v-text
-
[解決済み】Node Version Manager のインストール - nvm コマンドが見つかりません。
-
[解決済み】(Google Map API) Geocodeは以下の理由で成功しませんでした。REQUEST_DENIED
-
[解決済み] 関数内で変数を変更した後、変数が変更されないのはなぜですか?- 非同期コードリファレンス
-
[解決済み] Node.jsを使ってテキストファイルを読み込む?