#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 внутри основных и бумажных элементов