30
fs.createReadStream()のENOENTをキャッチできません。これは別のクロージャーチェーンで例外をスローする非同期関数ですか?はfs.createReadStreamのENOENTがuncatchableですか?
$ node -v
v0.10.9
$ cat a.js
fs = require('fs')
try {
x = fs.createReadStream('foo');
} catch (e) {
console.log("Caught");
}
$ node a.js
events.js:72
throw er; // Unhandled 'error' event
^
Error: ENOENT, open 'foo'
エラースタックではなく、「キャッチ」が印刷されることを期待しています。
ストリームオブジェクトが同期的に返されるとは思いますが、ファイルのオープンはイベントエミッションと非同期に発生します。 'stream.on( 'error'、...)'が有効になる前にエラーイベントが発生する可能性はありますか?これをノードのREPLに一度に1行ずつ入力すると、これが表示されます。 –
はい、イベントが発生する前に現在のティックが完了することが保証されます。あなたがすぐにあなたのハンドラーを縛る限り、すべてがうまくいきます。 –
これは本当に混乱している動作です! – UpTheCreek