obsługa wyjątków, rzucone błędy, w ramach obietnic
Używam zewnętrznego kodu jako rozszerzenia zewnętrznego do usługi node.js. Metody API zwracają obietnice. Rozwiązana obietnica oznacza, że akcja została wykonana pomyślnie, obietnica nieudana oznacza, że wystąpił jakiś problem z przeprowadzeniem operacji.
Teraz mam kłopoty.
Ponieważ kod strony trzeciej jest nieznany, mogą wystąpić błędy, błędy składniowe, problemy z typem, dowolna liczba rzeczy, które mogą spowodować, że node.js wyśle wyjątek.
Jednakże, ponieważ cały kod jest zawinięty w obietnice, te rzucone wyjątki w rzeczywistości powracają jako nieudane obietnice.
Próbowałem umieścić wywołanie funkcji w bloku try / catch, ale nigdy się nie uruchamia:
// worker process
var mod = require('./3rdparty/module.js');
try {
mod.run().then(function (data) {
sendToClient(true, data);
}, function (err) {
sendToClient(false, err);
});
} catch (e) {
// unrecoverable error inside of module
// ... send signal to restart this worker process ...
});
W powyższym przykładzie kodu psuedo, gdy zostanie zgłoszony błąd, pojawia się on w nieudanej funkcji obietnicy, a nie w łapaniu.
Z tego, co czytam, jest to funkcja, a nie problem, z obietnicami. Mam jednak problem z zawinięciem głowy, dlaczego zawsze chcesz traktować wyjątki i oczekiwane odrzucenia dokładnie tak samo.
Jeden przypadek dotyczy faktycznych błędów w kodzie, prawdopodobnie niemożliwych do odzyskania - drugi to tylko możliwe brakujące informacje o konfiguracji, parametr lub coś do odzyskania.
Dzięki za pomoc!