Как и где отловить асинхронное Javascript исключение (см. внутри)?

интернет программирование JavaScript AJAX exception

Где и как необходимо применить конструкции try/catch, чтобы отловить исключения, которые генерируются в асинхронных вызовах?
Например при вызове метода onreadystatechange объекта XMLHttpRequest, или при вызове функции setTimeout.

Пример #1:
<script type="text/javascript">
var request = new XMLHttpRequest();
request.open( "GET", "some_url.php", true );
request.onreadystatechange = function()
{ if( this.readyState == 4 )throw 1; } // <- exception HERE
request.send( null );
</script>

Пример #2:
<script type="text/javascript">
setTimeout( function(){ throw 1; }, 10 );
</script>

Примечание:
Исключения генерирую я сам, поэтому отлавливать их в том же месте:
setTimeout( function(){ try{ throw 1; } catch(e){ /*do something*/ } }, 10 );
не имеет смысла.
Ответы:
А ты их не генерируй. Надо понимать, что исключение - особый тип _возвращаемого значения_, и если у тебя асинхронный обработчик onreadystatechange, возвращаемое значение которого никому не интересно, то исключения тут неуместны.
Конструкцию try/catch подключают по моему к строчке var request = new XMLHttpRequest();
так как там может быть ие и другие браузеры не поддерживающие XMLHttpRequest
Насколько мне известно onreadystatechange исключения не генерирует


15 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.