Os rastreamentos de pilha indicam fontes de erro, mas são infinitamente mais úteis quando as funções que estão falhando têm nomes. Por exemplo, executando uma função puramente anônima com o nó --stack-trace-limit
definido como 1:
(function () {
throw new Error('Whodunnit?');
})();
Produz um traço inútil:
Error: Whodunnit?
at repl:2:7
Compare com o resultado, uma vez que um nome foi adicionado:
(function isJudgeDoom () {
throw new Error('Whodunnit?');
})();
Error: Whodunnit?
at isJudgeDoom (repl:2:7)r>
Muito melhor.
Resumo de rastreamento
Cada intérprete apresentará traços de maneira um pouco diferente, mas todos se beneficiam de mais informações. Usando o Node REPL como exemplo, compare um erro em uma função anônima com o seguinte:
// referenced by variable
var rotten = function () {
throw new Error('!!!');
};
Error: !!!
at rotten (repl:2:7)
// referenced on prototype
Foo.prototype.rotten = function () {
throw new Error('!!!');
};
Error: !!!
at Foo.rotten (repl:2:7)
// Named and referenced on prototype
Foo.prototype.rotten = function evil () {
throw new Error('!!!');
};
Error: !!!
at Foo.evil [as rotten] (repl:2:7)
O melhor caminho, então, é errar por excesso de cautela: nomeie cedo, nomeie frequentemente.
Adaptado de Naming JavaScript Functions