domain
内置模块将会被弃用:
稳定性:0 - 已弃用
此模块正在等待弃用。 一旦替代API确定,此模块将被完全弃用。 大多数最终用户不应该使用此模块。 那些绝对需要域提供的功能的用户可以在现有时间内依赖它,但应该预期将来必须迁移到其他解决方案。
根据此信息,他们目前并没有真正推荐一个解决方案。但是如何实现与以下功能类似的功能:
var d = require('domain').create();
d.on('error', function(err) {
console.log(err);
});
d.run(function() {
setTimeout(function () {
throw new Error("Something went really wrong in async code.");
}, 1000);
});
所以,这个处理异步错误的方法很好用,但是domain
模块已经被弃用了。
如何将这段代码迁移到更好的东西?
我的使用案例是,我正在编写一个库,它接受一个函数作为输入,并运行该函数并显示结果(实际上,您可以将其视为单元测试库):
myLib.it("should do something", function (done) {
setTimeout(function () {
// Some async code
// ...
// But here an error is thrown
throw new Error("dummy");
}, 1000);
});
显然,我不想在这种情况下中断进程,但我希望显示一个漂亮的错误(基本上是在此函数中捕获错误)。
目前在库中我这样做:
var err = null;
try {
fn(callback);
} catch (e) {
err = e;
}
console.log(err || "Everything went correctly");
vm
模块可以是一个解决方案? - Ionică Bizăuvm
模块可能会证明有用,但即使如此,您仍需要小心谨慎。 - jfriend00