2016-09-17 1 views
0

fs.createReadStream()を含む複数のステートメントがあります。私はon('error',cb)イベントを聞いてエラーを処理できることを知っていますが、各ストリームでerrorイベントを聴き始めるとコードが乱雑になります。私はそれがこれをきれいにしたい:try catchブロック内の複数のfs.createReadStream

try{ 
    var file1 = fs.createReadStream(path1), 
     file2 = fs.createReadStream(path2), 
     file3 = fs.createReadSTream(path3), 
     .... 
} 
catch(e){ 
    console.log(e); 
} 

しかし、これはこのように動作しません。とにかく、上記のようなコード構造を使用して、各ストリームのerrorイベントをリッスンするのではなく、エラーを処理できますか?

ありがとうございます。

+1

なぜ 'fs.createReadStream()'にパスをとり、 'error'ハンドラをつける関数を使っていないのですか?合理的にクリーンなコードが得られるはずです。 – robertklep

答えて

2

短い答えはで、です。

var file1 = fs.createReadStream(path1).on('error', onError), 
    file2 = fs.createReadStream(path2).on('error', onError), 
    file3 = fs.createReadSTream(path3).on('error', onError); 

function onError(err) { 
    // `this` === stream that encountered the error 
    console.log(err); 
} 
1

に:あなたはただ一つの関数を作成し、各ストリームのerrorハンドラとしてそれを使用する、(あなたはとにかくのtry-catchケースになります)エラー処理ロジックを統合することができますと仮定

短いと、try/catchを使用して非同期errorイベントをキャッチすることはできません。 Node.js Errorsについての詳細を読む。

この場合、というイベントはtry/catchコードの実行後に発生します。この場合、errorというイベントが発生します。

実際にtry/catchが必要な場合は、fs.readFileSyncなどの同期メソッドを使用することを検討してください。

try{ 
    var file1 = fs.readFileSync(path1), 
     file2 = fs.readFileSync(path2), 
     file3 = fs.readFileSync(path3), 
     .... 
} 
catch(e){ 
    console.log(e); 
} 
関連する問題