2 回答
TA贡献1811条经验 获得超5个赞
是否以及何时这样做将是一个见仁见智的问题,因此这部分对于 Stack Overflow 来说是题外话。
但具体的问题是:如果你这样做了,你需要采取什么预防措施吗?答案是:是的。您需要捕获和处理错误。
考虑这个返回承诺的即发即弃异步调用:
doSomethingAsync();
如果正在做的事情可能失败,则该承诺可能会被拒绝。如果它被拒绝并且没有处理该拒绝,那么:
在浏览器中,您会收到写入浏览器控制台的错误。99.9999999% 的用户不会注意到。
在 Node.js 中,您会将此错误写入控制台:
(节点:26477)[DEP0018] DeprecationWarning:不推荐使用未处理的承诺拒绝。将来,未处理的 Promise 拒绝将使用非零退出代码终止 Node.js 进程。
请注意警告:在某些时候,Node.js 的未来版本可能会在您允许未处理的 Promise 拒绝时开始 *终止进程。
因此,如果您一劳永逸,请务必捕获错误,即使您只是默默地吞下它们:
doSomethingAsync().catch(error => {}); // Obviously only do this if you really don't
// care about the error!
有趣的旁注:在 JavaScript 中,您一直在处理未处理的承诺履行。考虑:
doSomethingAsync()
.then(result => {
// ...do something with result...
})
.catch(error => {
// ...handle/report the error...
});
所有的承诺都在那里处理吗?
不,那很好。
记住这一点then并catch创建并返回一个承诺。上面返回的承诺catch没有附加任何处理程序。没关系,只要它永远被满足,而不是被拒绝。没有任何东西可以满足这种满足感。:-)
TA贡献1821条经验 获得超4个赞
我想我普遍关心的是,你有处理错误的机制吗?
eslint 有一个no-floating-promises
规则,至少强制你添加 a .catch()
,我认为这很好。
添加回答
举报