30
Tôi không thể bắt ENOENT của fs.createReadStream(). Đây có phải là một chức năng không đồng bộ, mà ném ngoại lệ trong một chuỗi đóng cửa khác nhau?là ENOENT từ fs.createReadStream 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'
Tôi hy vọng 'Bắt' được in chứ không phải là lỗi ngăn xếp!
Tôi đoán bạn đang nói đối tượng luồng được trả về đồng bộ, nhưng việc mở tệp của nó xảy ra không đồng bộ với phát xạ sự kiện. Không có cơ hội sự kiện lỗi nào được phát ra trước khi 'stream.on ('error', ...)' có hiệu lực không? Đó là những gì tôi thấy nếu tôi nhập vào nút REPL của một nút tại một thời điểm. –
Có, bạn có thể yên tâm rằng dấu hiện tại sẽ hoàn tất trước khi xảy ra bất kỳ sự kiện nào. Vì vậy, miễn là bạn ràng buộc xử lý của bạn ngay lập tức, tất cả là tốt. –
Hmm đó thực sự là hành vi khó hiểu! – UpTheCreek