Крис Buckett дал вам хороший способ, чтобы перезагрузить сервер, когда он выходит из строя. Однако вы все равно не хотите, чтобы ваш сервер опустился.
try-catch
работает только для синхронного кода.
doSomething() {
try {
someSynchronousFunc();
someAsyncFunc().then(() => print('foo'));
} catch (e) {
// ...
}
}
Когда метод асинхронной завершается или выходит из строя, это происходит «длинный» после того как программа выполняется с помощью метода doSomething
.
Когда вы пишете асинхронный код, это вообще хорошая идея, чтобы начать метод, возвращая будущее:
Future doSomething() {
return new Future(() {
// your code here.
var a = b + 5; // throws and is caught.
return someAsyncCall(); // Errors are forwarded if you return the Future directly.
});
}
Это гарантирует, что если у вас есть код, который бросает, ловит их, и вызывающий абонент может затем catchError()
их.
Если вы напишете этот путь, у вас будет гораздо меньше сбоев, если вы по крайней мере ошиблись на верхнем уровне.
Всякий раз, когда вы вызываете метод, возвращающий будущее, либо возвращайте его прямо (как показано выше), либо catchError()
, чтобы вы могли локально обрабатывать возможные ошибки.
На домашней странице a great lengthy article, которую вы должны прочитать.
Это было бы здорово, если бы у меня не было uncatchExceptionHandler, но как-то я не могу. [Я разместил новый вопрос для этого] (http://stackoverflow.com/questions/17292762/dart-unhandledexceptioncallback-is-ignored). –
Спасибо - увидели ваш вопрос и подняли сообщение об ошибке: http://dartbug.com/11505 –