我正在使用 knockout 编写应用程序,我希望能够捕获在 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);
        }
    }]);
};

我的问题是,这种方法是否存在任何潜在的负面影响,还是我缺少一种更好的方法?

最佳答案

这是很好的方法,基本上称为鸭打孔,请参阅Paul Irish的详尽解释

http://www.paulirish.com/2010/duck-punching-with-jquery/

我只会更新代码以处理错误,以防更多的参数传递给订阅函数,像这样

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);
    }
};

07-24 09:47
查看更多