Как легко обрабатывать все ошибки в асинхронных функциях JavaScript? - PullRequest
4 голосов
/ 08 июля 2011

try/catch не может обрабатывать ошибки в асинхронных функциях.
Конечно, можно обрабатывать, если я пишу try/catch в каждую асинхронную функцию, но это нереально.

window.onerror может обрабатывать ошибки в асинхронных функциях.
Но window.onerror ловит все ошибки в окне.
Я просто хочу обрабатывать все ошибки только в асинхронных (и также синхронных) функциях приложения javascript (например, игры).) в окне.
И если ошибка возникает только в приложении javascript, я хочу показать сообщение об ошибке и остановить приложение.
Я хочу ничего не делать для ошибок из приложения.

1 Ответ

1 голос
/ 08 июля 2011

Похоже, невозможно будет отличить ошибки скрипта от других ошибок. Если вы просто хотите поймать свои типы исключений, вы можете определить собственный конструктор Exception и извлечь из него все свои собственные исключения. Затем проверьте window.onerror, чтобы проверить, является ли объект производным от вашего пользовательского конструктора (и, если да, верните true, чтобы подавить ошибку или иначе вернуть false).

Я думаю, что самый надежный способ сделать это будет заключаться в том, чтобы окружить каждую асинхронную функцию в try / catch (даже если вы говорите, что не хотите этого делать). Вы можете просто сделать это идиомой; окружить каждую асинхронную функцию в try / catch и заставить блок catch вызвать функцию, которая обрабатывает ошибку соответствующим образом. Или, еще лучше, создайте идиому, в которой асинхронная функция принимает дополнительный обратный вызов «fail», который она вызывает в случае возникновения ошибки. Таким образом, вызывающая сторона асинхронной функции может указать асинхронный обработчик ошибок. (Этот подход используется платформой GWT, с одной стороны.)

...