Как перехватить все неперехваченные ошибки в приложении dart polymer?

#angular #dart

#dart #dart-polymer #dart-асинхронный

Вопрос:

Я хочу ввести обработчик, который будет перехватывать все необработанные ошибки в приложении Polymer.

Я подумал, Zone что это будет трюк, поэтому попробовал

 void main() {
  runZoned(() => initPolymer(), onError: (e, stackTrace) {
    _log.shout('TOP ZONE', e, stackTrace);
  });
}
  

Но это не работает. Ошибки никогда не попадают в этот обработчик ошибок.

Не уверен, относится ли это кhttp://code.google.com/p/dart/issues/detail?id=15854

Как люди справляются с этим?

Комментарии:

1. На самом деле я думаю, что это может быть связано с проблемой, на которую я ссылался. Если я выбрасываю при выполнении вызова rest, это работает

Ответ №1:

Как насчет использования Window.onError.

 import 'dart:html';

main() {
  window.onError.listen((ErrorEvent e) => print(e.message));
  throw 'boom!';
}
  

Комментарии:

1. Насколько я помню, это улавливает только ошибки JS, но я не уверен. Стоит попробовать.

2. Попробовал. Это улавливает исключения Dart. Работает с dart2js и Dartium.

3. Спасибо, я скоро попробую это

4. В конце я использовал комбинацию этого и изолировать onError, поскольку вы получаете правильные исключения dart из изоляции

5. Вы имеете в виду Isolate.adderorlistener()? Или изолировать.errors.listen()? Это уже работает в dart2js? Я думаю, это новое в 1.9.

Ответ №2:

Итак, я знаю, что мы получили обработку ошибок для работы, используя следующую конструкцию:

 runZoned(() {
   return initPolymer().run(() => Polymer.onReady
       .then(doSomeStuff)
       .whenComplete(doSomeCompleting));
 },
 onError: (err, [stackTrace]) {
   logger.severe("Received an error", err, stackTrace);
 });
  

Я опубликовал это в интересах быстрой помощи вам. У меня нет хорошего объяснения, почему ваша версия не работает в данный момент. Я немного покопаюсь и посмотрю, смогу ли я понять, что действительно отличается.

Комментарии:

1. Спасибо, Адам. По сути, это похоже на то, что у меня есть. Это улавливает большинство вещей, но, похоже, не улавливает все, что происходит в коде js внутри основных и бумажных элементов