Я запускаю внешний код в качестве стороннего расширения для службы node.js. Методы API возвращают promises. Решенное обещание означает, что действие было выполнено успешно, неудачное обещание означает, что была какая-то проблема, выполняющая операцию.
Теперь, когда у меня возникают проблемы.
Поскольку код третьей стороны неизвестен, могут быть ошибки, синтаксические ошибки, проблемы с типом, любое количество вещей, которые могут вызвать node.js для исключения исключений.
Однако, поскольку весь код завершается в promises, эти заброшенные исключения на самом деле возвращаются как неудачные promises.
Я попытался поместить вызов функции в блок try/catch, но он никогда не запускался:
// 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 ...
});
В приведенном выше примере psuedo-code, когда возникает ошибка, он появляется в функции неудачных обещаний, а не в catch.
Из того, что я читал, это функция, а не проблема, с promises. Тем не менее, у меня возникают проблемы, обертывая вокруг себя то, почему вы всегда хотели бы относиться к исключениям и ожидаемым отклонениям точно так же.
В одном случае речь идет о фактических ошибках в коде, возможно, невосстановимых - в другом случае просто отсутствует информация о конфигурации или параметр или что-то восстанавливаемое.
Спасибо за любую помощь!