NodeJs:如果花费太长时间取消函数调用

时间:2015-08-20 11:02:26

标签: 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 个答案:

答案 0 :(得分:1)

我在这里看到一些问题。

1)你通常不应该在Node.JS中编写阻塞代码,即使它只是"只有" 1秒。如果这是一个包含许多客户端的Web服务,阻塞一秒钟可能会产生破坏性的性能影响。

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

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

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