如何处理淘汰订阅中的错误

Posted

技术标签:

【中文标题】如何处理淘汰订阅中的错误【英文标题】:How to handle errors in knockout subscription 【发布时间】:2014-03-05 06:30:46 【问题描述】:

我正在使用 Knockout 编写应用程序,我希望能够捕获我的代码中在 Knout 内运行的任何错误,例如订阅。

目前我有一个淘汰订阅:

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

我的问题是这种方法是否有任何隐藏的副作用,或者我缺少更好的方法。

【问题讨论】:

对我来说似乎不错。这个问题在codereview.stackexchange.com上可能会更好 【参考方案1】:

这是一个很好的方法,基本上称为打鸭,请参阅 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);
    
;

【讨论】:

答案中的代码似乎检查了订阅的创建(这对我来说还不够),而问题中的代码检查了实际的回调执行(对我有用)。

以上是关于如何处理淘汰订阅中的错误的主要内容,如果未能解决你的问题,请参考以下文章

如何处理基于货币的 Stripe 订阅?

如何处理c#中的错误代码

如何处理绑定:更改 observableArray 中的数据后的 foreach

如何处理 VBA 中的 DLL 错误?

如何处理 NSPersistentContainer.loadPersistentStores 中的错误?

如何处理mio中的错误?