Возврат ошибки в функции обратного вызова ajax - PullRequest
1 голос
/ 01 января 2011

Итак, взгляните на приведенный ниже примерный код:

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

}

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

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

Я могу перехватить исключение в моей функции обратного вызова, когда выброшено из B. Однако, когда я перебрасываю ту же ошибку в обратном вызове, она никогда не попадает в диспетчер. Зачем? Независимо от того, что обратный вызов может выполняться всякий раз, когда его цепочка все еще, кажется, диктует, что ошибка должна всплыть и пойматься менеджером, хотя, как уже говорилось, этого не происходит. Может кто-нибудь объяснить мне, почему это и, возможно, как это исправить?

Ответы [ 2 ]

2 голосов
/ 01 января 2011

Обратный вызов вызывается асинхронно . «Никого нет дома», слушающего исключения, когда вызывается обратный вызов. Браузер вызывает обратный вызов в ответ на асинхронное событие завершения HTTP-запроса. Ваш try ... catch блок является статической конструкцией, и поэтому он не будет играть никакой роли в обработке исключений, генерируемых вашей функцией обратного вызова. try ... catch выполняется синхронно, и к тому времени, когда происходит функция обратного вызова, это уходит в прошлое. Таким образом, вы не можете поймать исключение таким образом; это просто не имеет никакого смысла.

Вместо этого вы можете настроить Ajax так, чтобы когда вы решали, что пришло время связаться с сервером, вы предоставляете код, необходимый для запроса и кода, который вы хотите запустить, когда запрос выполнен успешно, и код, выполняемый при сбое запроса. Как именно вы это сделаете, зависит от используемого вами механизма Ajax.

0 голосов
/ 01 января 2011

Вы не описали, что делает функция A, но я предполагаю, что она инициирует вызов AJAX - этот вызов выполняется асинхронно, в то время как функция Manager немедленно возвращается.Обратный вызов выполняется браузером в отдельном (глобальном) контексте, который не имеет никакого отношения к функции Manager, поэтому любое исключение, которое вы там выводите, будет не обработано и будет отображаться в журнале ошибок браузера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...