我正在使用knockout编写一个应用程序,我希望能够捕获我的代码中的任何错误,这些错误在knockout中运行,例如订阅。
目前我有一个淘汰赛订阅:
var myObservable = ko.observable();
myObservable.subscribe(function (val) {
// Code here is error prone
});
我希望能够在我的应用程序中使用上述模式,但能够捕获订阅回调中抛出的任何错误。
我目前的解决方案是使用错误处理程序包装ko.subbscribable.fn.subscribe函数,如下所示:
var _subscribe = ko.subscribable.fn.subscribe;
ko.subscribable.fn.subscribe = function (callback) {
if (arguments.length != 1) return _subscribe.apply(this, arguments);
else return _subscribe.apply(this, [function () {
try
{
callback.apply(this, arguments);
}
catch (err) {
// handleError is a function in my code which will handle the error for me
handleError(err);
}
}]);
};
我的问题是这种方法是否有任何隐藏的副作用,或者是否有一种我缺少的更好的方法。
答案 0 :(得分:0)
这是一种很好的方法,基本上称为鸭子打孔,请参阅保罗爱尔兰的精彩解释
http://www.paulirish.com/2010/duck-punching-with-jquery/
我只会更新代码来处理错误,以防更多参数传递给subscribe函数,就像这样
var _subscribe = ko.subscribable.fn.subscribe;
ko.subscribable.fn.subscribe = function () {
try {
return _subscribe.apply(this, arguments);
}
catch (err) {
// handleError is a function in my code which will handle the error for me
handleError(err);
}
};