0

我有

function doSome(){}

如果我想在执行超过 200 次轧机时停止执行此功能该怎么办?

非常感谢。

4

3 回答 3

1

我想 200 毫秒有点短,但是:

  • 如果您有一个while循环,请Date在进入循环之前创建一个对象并在循环中创建一个新对象。如果差值大于 200,则打破它

    start = new Date()
    while (1) {
        end = new Date()
        if (end - start > 200) break
        // work
    {
    
  • 如果您正在执行 Ajax 调用,请参阅aborting AJAX call

于 2013-08-13T12:50:38.007 回答
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,你不能直接从 worker 更新 DOM。

于 2013-08-13T13:21:36.200 回答
0

一个web worker可以用它的terminate函数来终止。没有其他方法可以从 Javascript 本身中断 Javascript 的执行。请注意,许多浏览器还具有慢速脚本检测功能,当脚本运行一定时间或指令数量时会提示用户。然而,这是无法通过 Javascript 控制的。

于 2013-08-13T12:49:22.063 回答