manipulação de exceção, erros lançados, dentro de promessas

Estou executando código externo como uma extensão de terceiros para um serviço node.js. Os métodos da API retornam promessas. Uma promessa resolvida significa que a ação foi realizada com sucesso, uma promessa falhada significa que houve algum problema na execução da operação.

Agora é aqui que estou tendo problemas.

Como o código de terceiros é desconhecido, pode haver bugs, erros de sintaxe, problemas de tipo, qualquer coisa que possa fazer com que node.js lance uma exceção.

No entanto, como todo o código está envolto em promessas, essas exceções lançadas estão, na verdade, voltando como promessas não cumpridas.

Eu tentei colocar a chamada de função dentro de um bloco try / catch, mas nunca é acionado:

// 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 ...
});

No exemplo acima do código psuedo, quando um erro é lançado, ele aparece na função prometora com falha e não na captura.

Pelo que li, isso é uma característica, não um problema, com promessas. No entanto, estou tendo problemas para entender por que você sempre quer tratar as exceções e as rejeições esperadas da mesma forma.

Um caso é sobre bugs reais no código, possivelmente irrecuperável - o outro é apenas possível falta de informações de configuração, ou um parâmetro, ou algo recuperável.

Obrigado por qualquer ajuda!

questionAnswers(3)

yourAnswerToTheQuestion