Obsługa asynchronicznych wyjątków JavaScript za pomocą node.js

Obecnie pracuję nad aplikacją node.js i mam zwykle problem z asynchronicznym kodem.

Implementuję serwer usług na wierzchu modułu HTTP Node.

Ten serwer obsługuje trasy (takie jak ekspresowe). Na przykład mam kod, który wygląda tak:

server.any("/someRoute",function(req,resp){
    resp.end("this text is sent to clients via http")
});

Serwer musi być w stanie wytrzymać awarię, nie chcę zawieszać całego serwera, gdy wystąpi problem z funkcją przekazaną do dowolnego. Problem występuje, gdy piszę kod, który wygląda tak:

server.any("/someRoute",function(req,resp){
    setTimeout(function(){
        throw new Error("This won't get caught");
    },100);
});

Nie widzę, w jaki sposób mogę złapać błąd tutaj. Nie chcę zawieszać serwera na jednym usterce po stronie serwera, zamiast tego chcę obsłużyć 500.

Jedyne rozwiązania, które udało mi się wymyślić, naprawdę nie są ekspresyjne. Wymyśliłem tylko użycieprocess.on("uncaughtException",callback) i podobny kod za pomocą węzła 0.8Domains (co jest częściowym rozwiązaniem, ale Domeny są obecnie wadliwe i nadal nie jest to zbyt ekspresyjne, ponieważ muszę stworzyć domenę dla każdego uchwytu).

To, co chciałbym osiągnąć, jest wiążącethrow działania od funkcji do zakresu, idealnym rozwiązaniem jest powiązanie wszystkich wyrzuconych błędów z funkcji do określonej funkcji obsługi.

czy to możliwe? Jaka jest najlepsza praktyka w przypadku błędów w tym przypadku?

Chciałbym podkreślić, że powinno być możliwe kontynuowanie obsługi żądań po złych żądaniach, a ponowne uruchomienie serwera na każde żądanie lub utworzenie domen dla każdego programu obsługi i przechwycenie ich nie przechwyconych wyjątków wydaje mi się złym pomysłem. Dodatkowo - słyszałem obietnice, które mogą mi pomóc (coś na tematthrow w obietnicach), czy obietnice mogą mi pomóc w tej sytuacji?

questionAnswers(1)

yourAnswerToTheQuestion