Tôi đang gặp phải một hành vi lạ với instanceof trong NodeJs. Tôi đang cố gắng để tạo ra một mô-đun mà ném ngoại lệ mà có thể bị bắt bởi tiêu thụ các mô-đun và xử lý dựa trên loại ngoại lệ. Tuy nhiên, cuộc gọi để kiểm tra loại "trường hợp lỗi của mod.MyException" luôn trả về false.Nodejs + Yêu cầu instanceof behavior
mymodule.js:
function MyException() {}
MyException.prototype = new Error();
MyException.prototype.constructor = MyException;
function Foo() {
throw new MyException();
}
exports.Foo = Foo;
exports.MyException = MyException;
myconsumingmodule.js
var mod = require('mymodule');
try {
mod.Foo();
} catch (error) {
if (error instanceof mod.MyException) { // always returns false
//do error specific handling (never executes)
return;
}
// generic handling
}
Nếu tôi làm bài kiểm tra instanceof trong mymodule.js như vậy nó trả về true
mymodule .js
var a = new MyException()
console.log(a instanceof MyException); //true
Tuy nhiên nếu tôi tạo ngoại lệ trong mô-đun tiêu thụ và kiểm tra nó xác định chính xác nó là MyException, nó không chỉ khi so sánh nó với ngoại lệ được tạo bởi mô-đun kia.
myconsumingmodule.js
var mod = require('mymodule')
var b = new mod.MyException();
console.log(b instanceof mod.MyException); // true
hoạt động cho tôi trên nút 0.10.5 – soulcheck
@Eriedor, bạn đã bao giờ tìm thấy giải pháp cho vấn đề này chưa? – jayarjo
Tôi e rằng tôi không có, tôi đã từ bỏ cố gắng giải quyết vấn đề này và không xem lại nó để xem nó có được sửa trong phiên bản sau của nút hay không. – Eriedor