Há uma regra no Q (e outras bibliotecas prometidas em implementação .done()
) que evita muita frustração de depuração:
A regra de ouro da
done
vs.then
uso é: oureturn
a sua promessa de
outra pessoa, ou se as extremidades da cadeia com você, liguedone
para encerrá-la.
Depois de alguma prática, é fácil e natural segui-lo, mas, como qualquer outra tarefa manual, ainda está sujeito a erros.
Felizmente, Q mantém um registro das promessas falhadas não tratadas para que tenhamos a chance de fazer algo com elas. Como uma promessa pode ser cumprida muito depois de ser criada, há apenas um momento em que sabemos com certeza que uma promessa não foi cumprida: quando a página descarrega.
Com isso em mente, por exemplo, podemos lançar o primeiro erro não tratado no loop de eventos para que seja tratado como qualquer outro erro lançado fora de uma promessa:
// Throw the first unhandled rejected Q promise
window.addEventListener('beforeunload', function () {
Q.getUnhandledReasons().forEach(function (error) {
throw error;
});
});
Normalmente, por padrão, o navegador mostrará o erro no console, mas você pode fazer o que quiser substituindo window.onerror
.