2017-01-11 7 views
1

私はudemy nodejsコースからいくつかのコードを実行することに問題があります。私はそれが何をしているのか、それが何をするのかを知っていますが、なぜイベントが完了したらgreet2関数が私に「未定義」を表示しているのかわかりません。Nodejs udemyコースコードエラー

コードは次のとおりです。

var fs = require('fs'); 

var greet = fs.readFileSync(__dirname + '/greet.txt', 'utf8'); 

console.log(greet); 

var greet2 = fs.readFile(__dirname, + '/greet.txt', 'utf8', function(err, data) { 
    console.log(data); 
}); 

console.log('Done!'); 

私はコンソールに表示されています:

こんにちは、世界! 完了! 未定義

なぜ私はgreet2のために未定義取得しています上の任意のアイデア?

おかげで

+0

を試みる価値があるかもしれません 'にconsole.logは(ERR);'エラーをした – Alex

答えて

2

変更:

var greet2 = fs.readFile(__dirname, + '/greet.txt', 'utf8', function(err, data) { 
    console.log(data); 
}); 

へ:

var greet2 = fs.readFile(__dirname + '/greet.txt', 'utf8', function(err, data) { 
    console.log(data); 
}); 

(余分なカンマ)

あなたのコードでは、働いていたが、何をreadFile関数に渡されることは__dirnameました、+'/greet.txt' eva NaNに、そして'utf8'のような他のパラメータとコールバックが表示されます。

+0

ありますかどうかを確認するために、機能するようになりました。ありがとう! –

0

JavaScript関数は常に何かを返します。関数で何かを返すように指定しなければ、デフォルトで 'undefined'が返されます。

これは何も影響しませんが、無視することはできますが、心配はいりません。 これは害を及ぼすことはありません。

0

なぜ私はgreet2のために未定義取得しています上の任意のアイデア?

は非同期関数であり、呼び出すと「初期化」されても戻りません。何も返されません。あなたは初期値と非同期呼び出しを持っている

一つの例は、var timeout = setTimeout(callback, mm)です。 toutには、clearTimeout(tout)をクリアするために使用できる値が保持されます。