我的应用程序有许多模块,并使用承诺所有的地方。承诺拒绝“......没有定义”,我怎么找到源
有时,深藏在这些模块中的一个,我的代码抛出一个异常 和承诺链条被拒绝。如果这个错误是可重现的,我可以单步执行,直到找到异常为止。但事实并非如此。
我怎么到的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是未定义”
仅供参考,'return Promise.resolve'没有意义,因为那只是返回一个函数引用。也许你的意思是'返回Promise.resolve()'。另外,你也可以直接做'返回值',这是毫无意义的。 – jfriend00
使用,这将捕捉拒绝承诺的堆栈踪迹[蓝鸟承诺(http://bluebirdjs.com/docs/api-reference.html)库。除此之外,通常情况下,在拒绝发生的地方缩小范围的方法是将'.catch()'语句记录到更接近拒绝来源的地方。 '.catch(ERR => {的console.log( “有用的东西”,ERR);抛ERR;});' – jfriend00
jfriend00,良好的抓。我会更新这个例子。我的例子通过在Promise.resolve中包装的automaticaly中的任何东西的副作用来工作。因此,我的示例返回已解决的承诺,该函数的参数用于生成解决承诺。 – grabbag