【发布时间】:2018-03-04 10:31:16
【问题描述】:
我的应用程序有很多模块,并且到处都使用 Promise。
有时,在其中一个模块的深处,我的代码会引发异常 并且承诺链被拒绝。如果这个错误是可重现的, 我可以单步执行,直到发现异常。但事实并非如此。
如何让 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 is not defined”
【问题讨论】:
-
仅供参考,
return Promise.resolve没有任何意义,因为这只是返回一个函数引用。也许你的意思是return Promise.resolve()。另外,也没有任何意义,您可以直接使用return value;。 -
使用Bluebird promise 库,它将捕获被拒绝承诺的堆栈跟踪。除此之外,缩小拒绝来源的常用方法是将
.catch()语句记录在更接近拒绝来源的位置。.catch(err => {console.log("something useful", err); throw err;}); -
jfriend00,不错。我将更新示例。我的示例通过 then 中返回的任何内容的副作用来工作,然后自动包装在 Promise.resolve 中。所以我的例子返回了一个已解决的承诺,一个函数的参数来生成一个解决承诺。
标签: javascript node.js promise