ajax回调函数中的重新抛出错误

时间:2011-01-01 02:52:31

标签: javascript ajax

请看下面的粗略代码:

    function Manager()
{
    try
    {
        A();
    }
    catch(e)
    {
        //......Never caught...
    }

}

function AjaxCallback()
{
    try
    {
        B();
    }
    catch(e)
    {
        throw e;
    }
}

function B()
{
    throw {//something here}
}

当我从B罚款中抛出时,我能够在回调函数中捕获异常。但是,当我在回调中重新抛出相同的错误时,它从未在管理器中被捕获。为什么?无论回调什么时候都可以执行,它的连锁似乎仍然要求错误应该回升并被经理抓住,尽管如上所述,这不会发生。任何人都可以向我解释为什么会这样,也许如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

回调被调用异步。调用回调时,“无人回家”会侦听异常。浏览器调用回调以响应HTTP请求完成的异步事件。您的try ... catch块是一个静态构造,因此它不会在处理回调函数抛出的异常时起任何作用。 try ... catch是同步执行的,回调函数发生时就是过去的事情。因此,你无法以这种方式捕获异常;它没有任何意义。

您可以做的是设置您的Ajax内容,以便在您决定联系服务器时,提供必要的代码来发出请求您要运行的代码请求成功时,请求失败时运行的代码。具体如何,取决于您正在使用的Ajax机制。

答案 1 :(得分:0)

您尚未描述A函数的作用,但我猜它会启动一个AJAX调用 - 此调用以Manager函数立即返回时异步运行。回调由浏览器在与Manager函数无关的单独(全局)上下文中执行,因此您抛出的任何异常都将被删除并显示在浏览器的错误日志中。