繁体   English   中英

拦截和干预JavaScript中的自定义错误对象

[英]Intercepting and interracting with a custom Error object in javascript

我正在使用具有自己的Error对象的自定义javascript模块。 我想拦截这些自定义的Error对象,并在try{} catch{}块中采用适当的路径,以将它们与Javascript的内置Error对象(例如ReferenceErrorTypeError等)区分开来。

有点像这样。

try {
    // Some code that might produce a traditional javascript error
    // or one of the errors raised by the module I am using.
}catch (error){
    if(error instanceof ExchangeError){
        // Handle this in a way.
    }else{
        // Probably one of the built in Javascript errors,
        // So do this other thing.
    }
}

因此,在上面的示例中, ExchangeError是属于该特定模块的自定义错误,但是,尽管当我执行error.constructor.name我得到了ExchangeError ,但我无法对我的错误运行instanceof

我的JavaScript范围根本不知道该ExchangeError 所以问题是,如何截获这类Error对象? 我敢肯定我可以通过字符串匹配来做到这一点,但只是想检查一下是否有更优雅的方法。

我尝试过的一件事是,我有自己的errors模块,其中包含一些自定义错误,我试图模仿该模块的Error对象:

    class ExchangeError extends Error {
        constructor (message) {
            super (message);
            this.constructor = ExchangeError;
            this.__proto__   = ExchangeError.prototype;
            this.message     = message;
         }
     }

并通过我的errors模块导入该文件,但这显然不起作用。

通过实际实现自己的ExchangeError我实际上做的事情确实非常糟糕,我用自己的ExchangeError遮蔽了instanceof检查,而来自模块的ExchangeError实例却不是我自己的ExchangeError的实例。 这就是为什么我if支票被逐渐平息。

解决方案就是这样做:

     const { ExchangeError } = require ('ccxt/js/base/errors');

从模块内部导入错误。 现在, instanceof查找正在运行。 我不知道有人可以从这样的模块中导入点点滴滴。

感谢@FrankerZ指出这一点。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM