ノードが正しく認識されている場合、リスナーは接続後に発生するイベントのみを受信します。 missing.txtにファイルがないとします。これは動作します:fs.createReadStreamでエラーが発生しました
'use strict';
const fs = require('fs');
var rs = fs.createReadStream('missing.txt');
rs.on('error', (err) => console.log('error ' + err));
それが生成する:エラーエラー:ENOENT:そのようなファイルやディレクトリはありません、オープン... \ missing.txt
は、なぜその仕事をしますか?また、次のように四行目を変更して動作します:
setTimeout(() => rs.on('error', (err) => console.log('error ' + err)) , 1);
しかし、5msのにタイムアウトを変更すると、エラーが未処理のイベントとしてスローされます。
イベントリスナーの追加が遅れても、発生したエラーをキャッチするレースをセットアップしていますか?ストリームとして開く前に、ファイルの存在を明示的にチェックする必要がありますか?しかし、これはfs.existsに関してNode docs stateという別のレースを作り出すことができます。「他のプロセスが2つの呼び出しの間でファイルの状態を変更する可能性があります。 Moroeoverでは、イベントリスナーは他のエラーを捕捉するので便利です。
明示的な遅延を導入することなく、存在しないファイルをストリーミングしようとするエラーを聞くのに十分速くイベントリスナーが追加されると仮定するのがベストプラクティスですか?
偉大な答え。次のティックの意味を理解していない人のための[イベントループ](http://stackoverflow.com/questions/21607692/understanding-the-event-loop)の詳細はこちらです。 – Govdata1