Wie man in NodeJS „alles fängt“.JavaScript

Javascript-Forum
Guest
 Wie man in NodeJS „alles fängt“.

Post by Guest »

Ich erstelle eine Infrastrukturschicht, die regelmäßig „Handler“ ausführen soll.
Ich bin nicht derjenige, der die Handler schreibt, ihre Logik kann variieren.
Handler können gleichzeitig ausgeführt werden.
Ich möchte, dass die Infrastruktur für Isolation sorgt, d. h. die Infrastruktur sollte sicherstellen, dass ein Fehler, ein Fehler auf Anwendungsebene, in einem Handler keine Auswirkungen auf andere Handler hat, die „gleichzeitig“ ausgeführt werden.
Derzeit habe ich umzingelt jeder Handler werden mit try-catch ausgeführt, aber es scheint, dass es viele Arten von Fehlern gibt, die, wenn sie auftreten, nicht in der Catch-Klausel abgefangen werden und somit den Dienst zum Absturz bringen (weil sie in einem anderen Kontext ausgeführt werden).
Ich gehe davon aus, dass man auf der Handler-Ebene den Handler so aufbauen kann, dass alle Fehler behandelt werden, und an vielen Stellen passiert genau das. Mein Problem ist, dass, wenn jemand „vergessen“ hat, den Fehler auf der Handler-Ebene zu behandeln, ich als Infra-Schicht diese Fehler nicht für ihn „abfangen“ kann, sodass ich keine Isolation erzwingen und sicherstellen kann, dass ein Fehler in einem Handler auftritt hat keine Auswirkungen auf andere.
Wie wird mit Typoskript mit einem solchen Fall umgegangen?
Ein Code zur Veranschaulichung des Problems ist (vorausgesetzt, er befindet sich in einer asynchronen Funktion):

Code: Select all

try {
await new Promise((resolve, reject) => {
setTimeout(() => {
throw new Error('This error is not caught!');
}, 0)
})
} catch {
console.log("the error never gets here");
}
Eine Lösung ist find, besteht darin, das uncaughtException-Ereignis abzuhören und es dort zu verarbeiten, also zu meiner Dienstinitialisierung etwas hinzuzufügen wie:

Code: Select all

process.on('uncaughtException', (err) => {
console.error('uncaught exception', err.message);
});
Das löst das Problem, aber ich bin mir nicht sicher, ob es eine gute Vorgehensweise ist, und irgendwie fehlt mir hier der Kontext, aber vielleicht ist das in Ordnung.
Gibt es einen besseren Weg, das zu erreichen, was ich will?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post