调用jquery插件时是否应使用try-catch

时间:2019-05-22 09:32:42

标签: javascript jquery performance

因此,我有jquery插件(或其他重要的插件/函数/库)。

我想知道是否应该在try-catch中调用该插件,以免出现一些不确定的类型错误,这可能会阻止脚本其余部分的执行。

这就是我现在如何称呼插件。

(function($){
    $(document).ready(function(){

        // jquery plugin
        try {
            $("#app").plugin();
        } catch (e) {
            console.log(e);
        }

        // some other function applied to entire document
        try {
            libraryFunction();
        } catch (e) {
            console.log(e);
        }
    });
})(jQuery);

我知道这不是代码审查,但是如果您对如何改进此代码有任何建议,请告诉我。

2 个答案:

答案 0 :(得分:1)

使用try-catch块处理未知行为始终是一个好习惯。但是,更重要的是知道一旦捕获到异常就如何处理。在上面的代码中,仅记录了异常(这很好),而没有其他记录。在这种情况下,您的执行可能仍然会被阻止。

此外,最好将异常返回给调用方并使其处理该行为。例如,在上面的代码中,如果jquery引发了异常,则可以让调用者知道该异常,并且调用者可以决定再次调用该函数或执行其他操作。

简而言之,在捕获后,处理决定了如何恢复执行。单独登录将无济于事。

编辑:

显示为什么应该抛出异常的示例:

让我们说我有一个AppThread,它请求一个工作线程在SQL数据库中存储一些数据。这样的代码流在理想情况下将不需要工作线程将任何内容返回给调用方,因为工作线程仅执行一些Insert语句。 现在,在插入过程中,工作线程捕获了SQLException并简单地记录并返回了。现在,应用程序线程从未收到此异常的通知,它只是假定已按请求插入数据。一段时间后,AppThread现在希望从数据库中读取相同的数据,并要求WorkerThread使用一些ID来获取数据。这次,代码将不会引发任何异常,并且结果集将仅为null。现在请记住,AppThread确保数据将存在并且如果结果集为null则不知道该怎么办。因此,以一种方式,异常发生后的某个时间,代码执行将被阻止。

现在,如果工作线程提前将异常通知给应用线程,则该应用线程将已经知道并且将重新尝试插入操作,或者向用户显示一个对话框,让她/他知道数据可能需要在再次尝试插入之前进行验证。同样,当异常被传递回时,其消息将直接提示用户出了什么问题。他将不必回到日志来检查出了什么问题。

答案 1 :(得分:1)

我已经解决了以下情况:插件错误实际上使脚本的其余部分搞砸了,并使用try-catch调用插件解决了问题。

大量使用try-catch可能会减慢脚本的速度,但是除非处理长循环,否则性能变化不会引起注意。