关于什么时候可以*不*等待异步任务的标准 JS 实践是什么?

来自 python 异步背景,在 python 中,始终跟踪异步任务(承诺)非常重要。运行时会为没有引用的“浮动”异步任务提供错误。但是,在 Javascript 中,在某些情况下,只启动一个异步任务而不等待它,甚至不记住它的 Promise 似乎是完全可以的,例如,如果你不关心它的返回值,只是希望它“稍后”执行.

是否有关于何时在浏览器或 node.js 中的 JS/TS 中的指南或最佳实践,只让异步任务离开而不保留对它的引用是可以接受的?显然,如果您关心它在主线代码中的返回值,您必须等待它,同样,如果您关心在 main 函数完成之前报告错误。还有哪些其他情况和注意事项?

需要明确的是,我不是在询问意见,而是在询问“触发和忘记”异步任务时要记住的重要事项(如果这是正确的术语)。



Qyouu
浏览 102回答 2
2回答

四季花海

是否以及何时这样做将是一个见仁见智的问题,因此这部分对于 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没有附加任何处理程序。没关系,只要它永远被满足,而不是被拒绝。没有任何东西可以满足这种满足感。:-)

收到一只叮咚

我想我普遍关心的是,你有处理错误的机制吗?eslint 有一个no-floating-promises规则,至少强制你添加 a .catch(),我认为这很好。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript