我有
function doSome(){}
如果我想在执行超过 200 个工厂时停止执行此函数,我该怎么办?
多谢。
我想 200 毫秒有点短,但是:
-
如果您有 while 循环,请在进入循环之前创建一个
Date
对象,并在循环中创建一个新对象。如果差值大于 200,则打破它start = new Date() while (1) { end = new Date() if (end - start > 200) break // work {
-
如果您正在执行 Ajax 调用,请参阅中止 AJAX 调用
Web worker 可以使用其 terminate
函数终止。没有其他方法可以从Javascript本身中断Javascript的执行。请注意,许多浏览器还具有慢脚本检测功能,当脚本运行一定时间或指令数时会提示用户。然而,这在Javascript中是无法控制的。
根据函数中实现的算法类型,您可以检查它运行了多长时间,但它不是很精确,您必须确保每个循环迭代花费很少的时间来处理。
例如:
function doSomething() {
var startTime = new Date.now(),
i = -1,
itemsToProcess = [1, 2, 3, 4],
len = itemsToProcess.length;
while ((Date.now() - startTime) <= 200 && ++i < len) {
//process items here
}
}
您还可以通过给浏览器一些呼吸时间来避免冻结 setTimeout
或setInterval
.如果您想始终完成任务,这可能是更好的方法。
function startDoSomething(items, delay) {
var i = arguments[2] || 0;
//process
console.log('processing item at: ' + i);
if (++i < items.length) {
setTimeout(function () {
startDoSomething(items, delay, i);
}, delay);
}
}
最后,处理长时间运行的进程的一种更有效的方法是使用 Web worker,你不能直接从 worker 更新 DOM。