终止javascript中的挂起的承诺

Boc*_*iek 1 javascript asynchronous node.js

我有一个JavaScript程序,希望通过提供RabbitMQ的输入来持续执行。问题在于它有时会无限期地挂起并阻塞整个执行过程。我最初的想法是Promise.race在特定时间段后使用超时并让下一条消息进入,但是损坏的Promise本身仍在后台运行,并且永远不会结束。在此设计中,我将开始生成“僵尸”承诺,这些承诺最终将消耗我的系统资源(因为我的应用程序一直在运行)。我对这个程序真的没有控制权。没有什么abort()可以发送给我的功能了。所以我的问题是: 有没有办法杀死Promise并将其完全从事件循环中删除?

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

Jon*_*lms 5

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

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

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

那是一个选择,但是产生一个进程是很繁重的操作,因为它需要自己的运行时/内存/等等。因此,您不应该经常这样做。

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