在 Node.js 中,我有一个仅包含一个函数的模块。该函数返回 Promise,并且该 Promise 可能会被拒绝。我仍然不想强迫该模块的所有用户明确处理拒绝。在某些情况下,根据设计,忽略返回的承诺是有意义的。另外,我不想剥夺模块用户处理承诺拒绝的能力。
正确的做法是什么?
升级到 Node.js 7.1.0 后,我所有忽略拒绝处理的单元测试都显示以下警告:
(node:12732) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): Error: try to throw an error from unit test
(node:12732) DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
防止将来 Node.js 进程终止的正确方法是什么DeprecationWarning
描述?
一般来说,使用像 bluebird 这样的自定义库,您可以仅从代码中抑制拒绝,但在其他地方都无法抑制。本机承诺还不能做到这一点。
但是,您可以通过为其添加 catch 处理程序来手动抑制承诺。
function yourExportedFunction() {
const p = promiseThatMightRejectFn();
p.catch(() => {}); // add an empty catch handler
return p;
}
这样你就明确地忽略来自 Promise 的拒绝,因此它不再是未处理的拒绝,而只是被压抑的拒绝。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)