【问题标题】:Javascript try/catch scopeJavascript try/catch 作用域
【发布时间】:2012-08-08 06:45:01
【问题描述】:

我正在编写向服务器发出 Ajax 请求的代码。我在请求之外使用 try/catch 进行错误处理,如下所示。 search方法正在向服务器发送请求,如果能读取到结果,就调用回调函数。

我在问这个:由于 ajax 请求是异步的,如果回调内部(而不是搜索方法内部)有错误,它会落入外部 catch 块还是我需要在回调中进行另一个 try/catch功能?

try {
    service.search(function () {
        var entries = service.getEntries();
        $.each(entries, function (index, content) {
            var cat = {
                // those may throw exceptions, too
                name: content.get("category"),
                path: content.getPath()
            };
            categories.push(cat); // defined somewhere else.
        });
        if (categories.length < totalResults) {
            // A method call may throw exception
        } else if (typeof loadCallback === 'function') {
            // Done.
        }
    });
} catch (e) {

}

【问题讨论】:

  • 我不确定,但我猜 service.search() 会有一个 onerror 回调参数,可用于捕获异常,但就您的问题而言,我想它会被捕获catch 块,但当然不确定。
  • 我猜答案可能是'它取决于'......正如@yogi所说,异步方法应该有一些回调参数来检查完成后的错误。
  • 在我的情况下使用回调需要太多的代码,因为我有太多的函数像链一样互相调用。然后我需要为它们中的每一个写回调。
  • 异步回调在不同的调用堆栈中运行(当它们运行创建它们的原始调用堆栈时,它们早已丢失并被遗忘)。你无法捕捉到那里抛出的错误。

标签: javascript scope try-catch


【解决方案1】:

经过两三年的 javascript 开发,我发现在 ajax 请求中捕获错误的最佳方法是有多个回调:一个用于成功,一个用于错误。

我已经更改了 Netmera HTML5 SDK 中的所有方法,现在我们不需要任何 try/catch 块。我们需要做的就是传递两个函数参数:

service.search(function(dataArray) {
    // loop through dataArray
}, function(exception) {
    // Exception detail
}

在搜索方法内部,它是这样的:

this.search = function(successCallback, errorCallback) {
    ...
    request.onreadystatechange = function () {
        if (request.readyState == 4) {
            if (request.status == 200) {
                successCallback(...);
            } else {
                errorCallback(...);
            }
        }
    };
    request.ontimeout = function () {
        errorCallback(...);
    };

    request.send(...);
};

【讨论】:

    猜你喜欢
    • 2020-03-13
    • 1970-01-01
    • 2011-07-12
    • 2019-11-12
    • 1970-01-01
    • 1970-01-01
    • 2014-02-01
    • 2012-09-04
    • 1970-01-01
    相关资源
    最近更新 更多