让JavaScript停顿一会儿

79 阅读1分钟

有没有方式让JavaScript代码停顿一会儿,再执行后续代码?

答案是有

  • 采用setInterval实现
  • 采用ajax回调实现

采用setInterval实现

/**
 *  testFunc: 测试函数,判断目标是否达到预期,如果没达到(false)继续等待
 *  actFunc: 执行函数,如果目标达到预期,则运行执行函数,处理后续业务逻辑
 *  timeout: 间隔时间
 **/
function sleep(testFunc, actFunc, timeout) {
    var interval = setInterval(function() {
        if(!testFunc()) {
            console.log("waiting...");
        }else {
            clearInterval(interval);
            actFunc();
        }
    }, timeout);
}

采用ajax回调实现

/**
 *  利用后端延时,实现停顿
 *  缺点:占用后端资源,影响后端服务性能,慎用
 **/
function sleep(actFunc, timeout) {
    var url = "http://xxx.com/sleep";
    $.get(url, {'timeout': timeout}, function() {
        actFunc();
    }, 'json');
}

举栗子,网页出现button#gogo元素再执行后续代码

function go() {
    var timeout = 1000;
    console.log("hello, finding btn");
    sleep(function(){
        //执行测试函数
        var btn = document.getElementById("gogo");
        if(!!btn) {
            return true;
        }
        return false;
    },function() {
        //执行业务函数
        console.log("found btn");
        console.log("go on find next element");
    }, timeout);
}