我的应用程序有很多模块,并且在所有地方都使用了承诺。
有时,在其中一个模块中,我的代码会引发异常 并且承诺链被拒绝。如果此错误可重现, 我可以单步执行直到找到异常。但事实并非如此。
如何让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未定义”
答案 0 :(得分:0)
一种可能的解决方案是为promises创建一个解析器包装器,它接受拒绝消息。
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) })