相关疑难解决方法(0)

对使用深度npm依赖项的构造函数创建的对象使用`instanceof`

背景:

我有一个npm模块,我有常见的错误处理代码,包括自定义错误:

function CustomError () { /* ... */ }
CustomError.prototype = Object.create(Error.prototype);
CustomError.prototype.constructor = CustomError;
module.exports = CustomError;
Run Code Online (Sandbox Code Playgroud)

我有一些其他模块(我们称之为'module-a''module-b'),它们都依赖于错误处理模块.

我也有一些使用Bluebirds"过滤捕获"功能的代码:

doSomething
.catch(CustomError, () => { /* ... */ });
Run Code Online (Sandbox Code Playgroud)

问题:

经过一些调试后,我发现(事后看来有点明显)在'module-a'中创建的错误不是'module-b'创建的错误的实例.这是因为两个模块都有自己的包含CustomError构造函数的JS文件副本,这些副本都是独立运行的.

我宁愿不必诉诸我目前的解决方案,基本上是:

CustomError.isCustomError = e => e.constructor.toString() === CustomError.toString();
Run Code Online (Sandbox Code Playgroud)

然后:

doSomething
.then(CustomError.isCustomError, () => { /* ... */ });
Run Code Online (Sandbox Code Playgroud)

这显然是脆弱的,如果版本不同步将会崩溃.

所以...

有没有办法确保'module-a''module-b'都使用相同的构造函数实例?或者另一个不太脆弱的解决方案.

javascript node.js npm

15
推荐指数
2
解决办法
513
查看次数

标签 统计

javascript ×1

node.js ×1

npm ×1