【发布时间】: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