最近,我正在一个使用SetInterval和SetTimeout的项目中
这是简单的代码:
(注意:functionB,functionC与jquery ajax请求有关)
function functionB() {
jQuery.ajax({
type: 'POST',
url: 'https://MYHOSTNAME',
headers: {
'Content-Type': 'XXX',
'Accept': 'XXX'
},
data: MYDATA,
dataType: 'html',
success: function (data, status, xhr) {
var RESPONSEDATA = data;
//true if match my special string
var Compare = RESPONSEDATA.indexOf(MYSTRING) > -1;
if (Compare === true){
//stop the loop
clearInterval(loop1);
}
}
});
}
function Main(){
functionA();//can be anything
var loop1 = setInterval(function () {
setTimeout(functionB, 1000);
setTimeout(functionC, 1000);
}, 3000);
functionD();//can be anything
setTimeout(Main, 16000);
}
main();
我试图确保只有在用clearInterval结束loop1后才执行functionD,当functionB和functionC仍在循环中时不能执行,并且仅当执行functionD时,函数Main将等待16000ms并再次重新启动。
我用setInterval和setTimeout尝试了很多方法,但是没有运气。
任何JavaScript专家都知道该怎么做?
最佳答案
当您想要这个时:
运行functionA()
每4秒并行运行一次functionB()和functionC()
当停止运行functionB()和functionC()然后运行一次functionD
当functionD完成时,以16秒的延迟运行Main()
为循环添加活动检查
var loop1;
function functionB() {
jQuery.ajax({
type: 'POST',
url: 'https://MYHOSTNAME',
headers: {
'Content-Type': 'XXX',
'Accept': 'XXX'
},
data: MYDATA,
dataType: 'html',
success: function (data, status, xhr) {
var RESPONSEDATA = data;
//true if match my special string
var Compare = RESPONSEDATA.indexOf(MYSTRING) > -1;
if (Compare === true){
//stop the loop
clearInterval(loop1);
loop1 = false;
}
}
});
}
function aliveCheckOfLoop(){
if(loop1){
addTimeout(aliveCheckOfLoop, 500);
}else{
functionD();//can be anything
setTimeout(Main, 16000);
}
}
function Main(){
functionA();//can be anything
loop1 = setInterval(function () {
setTimeout(functionB, 1000);
setTimeout(functionC, 1000);
}, 3000);
aliveCheckOfLoop();
}
main();