有没有方式让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);
}