承诺拒绝“…未定义”,我如何find源

我的应用程序有很多模块,并在各地使用承诺。

有时候,在这些模块的其中一个模块中,我的代码会抛出一个exception,promise链被拒绝。 如果这个错误是可重复的,我可以单步执行,直到findexception。 但事实并非如此。

如何让nodejs生成一个回溯来识别有罪的模块,函数和代码行?

这是一个微不足道的例子。

'use strict'; // pretend multiple modules, each with deep complicated chains of Promises Promise.resolve() .then(() => { return Promise.resolve() }) .then(() => { return Promise.resolve() }) .then(() => { return Promise.resolve() }) .then(() => { x = "find me if you can, x is very common variable name"; return Promise.resolve }) .then(() => { return Promise.resolve() }) .then(() => { return Promise.resolve() }) .catch((e) => { console.log("where did you come from " + e) }) 

上面的输出是“你从哪里来的ReferenceError:x没有定义”

一个可能的解决scheme是制作承诺的parsing器包装器,接受拒绝消息。

 const resolver = (resolveItem, rejectMessage) => { return Promise .resolve(resolveItem) .catch(err => Promise.reject({...err, myMessage: rejectMessage})) } Promise.resolve() .then(() => { return resolver(function1(a, b, c), "1") }) .then(() => { return resolver(function2(a, b, c), "2") }) .then(() => { return resolver(function3(a, b, c), "3") }) .catch((e) => { console.log("I came from " + e.myMessage) })