我正在尝试创建一个延迟包装器q.js
,这样我就可以在自定义错误类中包装错误(字符串),然后再通过then()
or中的承诺传回它们fail()
。这就是我目前正在做的事情:
var getDeferred = function() {
var deferred = q.defer();
var reject = deferred.reject;
deferred.reject = function(error) {
if (!(error instanceof MyErrorClass))
error = new MyErrorClass(error)
return reject.apply(deferred, arguments);
}
return deferred;
}
所以这个想法是用户会做类似的事情
var deferred = getDeferred();
deferred.promise.fail(function(err) {
// err should now be instance of MyErrorClass and NOT a string
})
deferred.reject('A string error')
并期望进入MyErrorClass
处理fail()
程序,而不是传递给deferred.reject
.
上面的代码有效,但并不理想——我知道我不应该对 deferred.reject 进行猴子修补。但是有没有更好的方法来做到这一点?