История:
У меня есть модуль npm, в котором я использую общий код обработки ошибок, включая пользовательскую ошибку:
function CustomError () { /* ... */ }
CustomError.prototype = Object.create(Error.prototype);
CustomError.prototype.constructor = CustomError;
module.exports = CustomError;
У меня есть несколько других модулей (пусть их называют 'module-a' и 'module-b'), которые зависят от модуля обработки ошибок.
У меня также есть код с функциями Bluebirds "отфильтрованный улов":
doSomething
.catch(CustomError, () => { /* ... */ });
Проблема:
После некоторой отладки, которую я обнаружил (несколько явно задним числом), ошибки, созданные в 'module-a', не являются экземплярами ошибок, созданных 'module-b'. Это связано с тем, что оба модуля имеют собственную копию JS файла, содержащего конструктор CustomError
, оба из которых выполняются независимо.
Я бы предпочел не прибегать к моему текущему решению, которое в основном:
CustomError.isCustomError = e => e.constructor.toString() === CustomError.toString();
а затем:
doSomething
.then(CustomError.isCustomError, () => { /* ... */ });
Это явно непросто и развалится, если версии не синхронизируются.
Итак...
Есть ли способ убедиться, что 'module-a' и 'module-b' используют один и тот же экземпляр конструктора? Или другое, менее хрупкое решение.