终止 javascript 中的挂起承诺



我有一个JavaScript程序,我想通过提供来自RabbitMQ的输入来不断执行它。问题是它偶尔会无限期挂起并阻止整个执行。我最初的想法是使用Promise.race在特定时间段后超时,并让下一条消息进入,但破碎的承诺本身仍在后台的某个地方运行并且永远不会结束。在这个设计中,我将开始生成"僵尸"承诺,最终会吃掉我的系统资源(因为我的应用程序一直在运行(。我真的无法控制这个程序。没有什么比我可以发送给它abort()函数。所以我的问题是:有没有办法杀死承诺并将其从事件循环中完全删除?

如果不可能,那么生成第二个nodejs程序作为子进程并在出现问题时杀死它怎么样?它能正确清理我的系统资源吗?

有没有办法杀死承诺并将其从事件循环中完全删除?

不。承诺表示异步任务的结果,它们不知道任务本身,因此无法取消它。

如果不可能,那么生成第二个nodejs程序作为子进程并在出现问题时杀死它怎么样?

这将是一个选项,但生成一个进程是一项繁重的操作,因为它需要自己的运行时/内存/等,所以你不应该经常这样做。

相反,您可以管理基础异步任务的取消。这取决于实际任务是否可能。

你专注于错误的部分(可以理解!承诺没有兑现。你用承诺来观察的东西被挂起了。承诺什么都不做,它们只是提供了一种观察正在做的事情的方法。

要解决此问题,您需要查看哪些操作永远不会完成,然后在该级别解决问题。如果事情有一些取消或中止的方法,那就太好了;否则,在更深层次上暂停这个过程,让它拒绝它的承诺。

如果不可能,那么生成第二个nodejs程序作为子进程并在出现问题时杀死它怎么样?它能正确清理我的系统资源吗?

是的。它更贵,但这是权衡。如果它挂起,你可以完全杀死它。

最新更新