Fazendo os Stack Traces Contar

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-limitdefinido 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