我想实现自定义错误模块。自定义错误和蓝鸟的ErrorClass捕获导致无意中的行为
它应该是可能的实例使用此模块的应用程序的要求,声明中的个别错误:
var MyCustomError = require('custom-error')('MyCustomError');
这是模块:
'use strict';
var _CACHE = {};
function initError(name) {
function CustomError(message) {
this.name = name;
this.message = message;
}
CustomError.prototype = Object.create(Error.prototype);
CustomError.prototype.constructor = CustomError;
_CACHE[name] = CustomError;
}
function createCustomError(name) {
if (!_CACHE[name]) {
initError(name);
}
return _CACHE[name];
}
module.exports = createCustomError;
的要求,一个班轮以上工作到目前为止。
现在,在我的服务,我想明确地抓住这个错误:
var MyCustomError = require('custom-error')('MyCustomError')
// ...
return fooService.bar()
.catch(MyCustomError, function (error) {
logger.warn(error);
throw error;
})
如果我通过投掷MyCustomError这是伟大的工作拒绝fooService.bar的在我的测试的承诺。
但是,这只适用于我的测试和服务使用MyCustomError的相同实例。
例如,如果我删除了我的自定义错误模块中的缓存机制,catch将不会被达到/执行,因为蓝鸟不知道这两个错误是相同类型的:
function createCustomError(name) {
//if (!_CACHE[name]) {
initError(name);
//}
return _CACHE[name];
}
蓝鸟的处理的具体代码位于catch_filter.js,你可以看看right here。
尽管该方法在我的应用程序中起作用,但一旦多个模块使用自定义错误模块并且不再给出相同实例的共享,这将会更快导致问题。
我怎样才能得到这个概念和运行由不比较实例,但错误类型本身?
干杯,
克里斯托弗
Esailija嗨,因为我没有在一两天内的声誉也得到了自动分配给您的登录。幸运的是,因为你是蓝鸟的开发者,你应该得到它:) 代码:我没有看到你的观点如何批准处理?你谈论传统的试管捕捉处理而不考虑蓝鸟吗? –
@Christopher这将只适用于蓝鸟 – Esailija
所以这正是我在上面的例子中所做的 - 比如'catch(Errors.Entity.IllegalState.predicate,..)' –