【发布时间】:2022-01-11 16:46:04
【问题描述】:
假设我有一个执行某些操作的 forloop。如果执行时间超过 20 秒,我想打破 for 循环。
async function mainFunc(){
for (let step = 0; step < 5; step++) {
// Runs some complex operation that is computationally intensive
//someFunc() is a async method. SomeAnotherFunc() is a synchronous one.
await someFunc();
someAnotherFunc();//this function contains built in function
// execSync() that runs command line functions
await someFunc();
}
}
谁能给我一个简单的解决方案,让我在单独的线程上跟踪时间和中断循环,这样我就不会负担现有的 for 循环执行?
这个答案部分适用于我。 @Molda 给出的解决方案只会在异步方法的情况下帮助我。如果你看到我提供的代码 sn-p,有一个名为 someAnotherFunc() 的同步方法,它有一个运行命令行函数的 nodejs 进程函数“execSync”。现在跟踪这个函数的时间对我来说实际上是一个痛点,因为我无法访问该方法,因为它是一个内置函数。非常感谢您对如何进一步提出建议。
【问题讨论】:
-
JS 是单线程的
-
你试过什么?你的
console.log怎么会花 20 秒? -
我在 for 循环中显示的代码不是实际代码。在 for 循环中,有一个方法可以执行一些操作来处理一些数据,并且这个处理在某些情况下需要超过 20 秒。
-
execSync,这总是一个问题,我会使用exec,版本。您可以轻松地将其转换为承诺,然后超时将再次起作用。如果 20 秒过去了,甚至可以在进程上调用kill。 -
@Keith 在我遵循您的建议后,问题终于解决了。使用 Exec 而不是 Execsync 并与它一起使用 promise,我将它包装在一个超时函数中。看起来像一个巧妙的解决方案。非常感谢你
标签: javascript node.js express timer