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