我有
function doSome(){}
如果我想在执行200多个磨机时停止执行此功能,我该怎么办?
非常感谢。
答案 0 :(得分:1)
我想200毫秒它有点短,但是:
如果你有一个while循环,在进入循环之前创建一个Date
对象,在循环中创建一个新对象。如果差异大于200,请将其破坏
start = new Date()
while (1) {
end = new Date()
if (end - start > 200) break
// work
{
如果您正在执行Ajax调用,请参阅aborting AJAX call
答案 1 :(得分:0)
web worker可以使用terminate
函数终止。没有其他方法可以从Javascript本身中断Javascript的执行。请注意,许多浏览器的脚本检测速度都很慢,当脚本运行一定量的时间或指令数时会提示用户。但是,这不能通过Javascript控制。
答案 2 :(得分:0)
根据函数中实现的算法类型,您可以检查它运行了多长时间,但它不是非常精确,您必须确保每次循环迭代只需要很少的时间来处理。
例如:
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,你不能直接从工作者那里更新DOM。