我建议你设置一个全局的unhandledRejection handler https://nodejs.org/api/process.html#process_event_unhandledrejection在条目文件的最开头:
process.on('unhandledRejection', (reason, p) => { throw reason });
这样,即使您忘记在本地捕获错误,您仍然可以轻松地追踪它们。
Update
对于上述处理程序如何帮助您似乎有些困惑。基本上,当您没有捕获承诺错误时,节点会将该警告输出到控制台。无论出于什么愚蠢的原因,节点只输出错误消息而不输出堆栈。设置处理程序然后重新抛出错误会生成堆栈,并允许您更轻松地调试代码。这是一个例子:
let test = () => new Promise((resolve, reject) => {
throw new Error('Random Error'); // same as "reject(new Error('Random Error'));"
});
test();
如果没有处理程序,您将得到:
(node:20012) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): Error: Random Error
然后,我们在文件顶部添加处理程序:
process.on('unhandledRejection', (reason, p) => { throw reason });
let test = () => new Promise((resolve, reject) => {
throw new Error('Random Error'); // same as "reject(new Error('Random Error'));"
});
test();
现在我们得到了一个更好的错误堆栈:
(function (exports, require, module, __filename, __dirname) { process.on('unhandledRejection', (reason, p) => { throw reason });
^
Error: Random Error
at Promise (S:\amir\test.js:5:9)
at test (S:\amir\test.js:3:18)
at Object.<anonymous> (S:\amir\test.js:8:1)
at Module._compile (module.js:570:32)
at Object.Module._extensions..js (module.js:579:10)
at Module.load (module.js:487:32)
at tryModuleLoad (module.js:446:12)
at Function.Module._load (module.js:438:3)
at Module.runMain (module.js:604:10)
at run (bootstrap_node.js:394:7)