javascript - Node : Cancel function call if it takes too long

标签 javascript node.js

在我的 Node.js 应用程序中,如果函数调用花费的时间太长,我需要某种机制来停止该函数调用。

function testIt() { ... }

runFunctionOnlyFor(1000, testIt, function (err) {
    if (err) console.log('function call timed out');
    else console.log('function call completed successfully');
});

现在,runFuncOnlyFor 的实现当然是未知的(对我而言)。有什么关于如何实现的建议吗?

最佳答案

我在这里看到了一些问题。

1) 你通常不应该在 Node.JS 中编写阻塞代码,即使它“只有”1 秒。如果这是一个有很多客户端的 Web 服务,阻塞一秒钟可能会对性能造成毁灭性的影响。

2) 由于 Node.JS 实际上是单线程的,我真的没有看到任何简单的方法来在一定时间后取消执行,除非计时由 testit 本身完成,因为您需要一个单独的线程来运行中止第一个线程中运行的函数的函数。

更好的方法可能是使 testit 函数异步,并将其分解为具有中间上下文切换的几个步骤,并定期检查可能由 设置的标志或类似内容一旦所需持续时间的计时器到期,runFunctionOnlyFor

另一种方法是使用 child process ,如果这适合您的目的。

关于javascript - Node : Cancel function call if it takes too long,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32116500/

相关文章:

javascript - 数据表单个列搜索不起作用

javascript - 如何使用动态键格式化 json?

node.js - Mongoose - 使用 findoneandupdate 和 $push 添加或更新子文档(当 upsert 为 true 时)

javascript - JavaScript 定时器会影响带宽吗

javascript - ng-show 动画效果不如预期

javascript - 使用 Handlebars 遍历复杂对象

Linux Ubuntu 14.04 在 1 台机器 1 个 ip 上的 2 个不同的 Web 服务器上运行 2 个网站

sql - 在 Sequelize 中同时查询两个组合字段

javascript - 即使在覆盖 module.exports 之后,模块仍然是一个空对象

javascript - 最后加载脚本/对象