我有一个 javascript 程序,我想通过从 RabbitMQ 提供输入来不断执行它。问题是它偶尔会无限期挂起并阻止整个执行。我最初的想法是使用 Promise.race
在特定时间后超时并让下一条消息进入,但损坏的 Promise 本身仍在后台某处运行并且永远不会结束。在这个设计中,我将开始生成“僵尸”Promise,它们最终会吃掉我的系统资源(因为我的应用程序一直在运行)。我真的无法控制这个程序。没有像 abort()
函数这样的东西可以发送给它。所以我的问题是:
有没有办法杀死 Promise 并将其从事件循环中完全移除?
如果不可能,那么如何生成第二个 nodejs 程序作为子进程并在出现问题时将其终止?它会正确清理我的系统资源吗?
最佳答案
Is there a way to kill the Promise and remove it from event loop completely?
没有。 Promises 表示异步任务的结果,它们不知道任务本身,因此无法取消它。
If it is not possible, then how about spawning second nodejs program as a child process and kill it if is something goes wrong?
这将是一个选项,但生成一个进程是一项繁重的操作,因为它需要自己的运行时/内存等。所以你不应该经常这样做。
相反,您可以管理 cancellation of the underlying asynchronous task .这取决于实际任务是否可行。
关于javascript - 在javascript中终止挂起的 promise ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57019085/