NodeJs:取消函数调用,如果它太长

在我的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的实现当然是未知的(对我来说)。 任何build议如何实现这个?

我在这里看到一些问题。

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

2)因为Node.JS实际上是单线程的,所以在一段时间之后,除非由testit自己完成时间保留,否则我们并不真的看到任何简单的方法来取消执行,因为您需要一个单独的线程来运行中止在第一个线程中运行的函数的函数。

一个更好的方法可能会使testit函数asynchronous,并将其分解成几个步骤,并进行中间上下文切换,并定期检查可能由runFunctionOnlyFor设置的标志或类似标志。

另一种方法是使用一个subprocess ,如果这符合你的目的。