Javascript尝试/捕获范围

时间:2012-08-08 06:45:02

标签: javascript scope try-catch

我正在编写一个向服务器发出Ajax请求的代码。我在请求之外使用try / catch进行错误处理,如下所示。搜索方法是将请求发送到服务器,如果它可以读取结果,则调用回调函数。

我问这个:因为ajax请求是异步的,如果回调内部有错误(不在搜索方法内),它会落入外部catch块还是我需要在回调中另外尝试/ 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) {

}

1 个答案:

答案 0 :(得分:0)

经过两三年的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(...);
};