如何阻止下一行执行,直到SetInterval循环被清除
Javascript: How to prevent the next line executed until SetInterval loop has been clearinterval?
最近我正在做一个使用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();
我试图确保functionond只会被执行一次loop1已经结束与clearInterval,它不能被执行时,functionB和functionC仍在循环中,只有当functionond被执行,函数Main将等待16000ms并重新启动。
我尝试了很多方法setInterval和setTimeout,但没有运气。javascript专家知道怎么做吗?
当你想要这个:
- 运行功能阳极()
- 每4秒并行运行functionB()和functionC()
- 当停止运行functionB()和functionC()时,运行functionD一次
- 当函数d完成时,以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();
另一种方法是将主函数分成几个部分,并在清除循环后调用第二部分。
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);
goOn();
}
}
});
}
function goOn(){
functionD();//can be anything
setTimeout(Main, 16000);
}
function Main(){
functionA();//can be anything
loop1 = setInterval(function () {
setTimeout(functionB, 1000);
setTimeout(functionC, 1000);
}, 3000);
}
main();
相关文章:
- node.js:setInterval()正在跳过调用
- 同步调用,直到用户通过angular验证为访问者
- 固定位置菜单时滚动,直到它击中一个相对容器的底部
- 正在等待呈现图表,直到加载数据为止
- setInterval和clearInterval javascript无法按需工作
- Don'我不明白为什么我的setInterval+jQuery;不起作用
- setInterval游戏循环的范围问题
- JavaScript setInterval problems
- Javascript没有't更新DOM,直到用户交互
- 设置随机数,然后每5秒随机减少一次,直到达到0(javascript)
- 如何在Javascript中延迟setInterval
- 如何执行相同的setInterval()
- SetInterval在javascript对象中表现怪异
- 从setInterval方法移动到带有sprite的requestAnimationFrame
- .value返回字符串,直到我将其保存到变量
- 停止setInterval,直到未执行操作
- 如何使用setInterval直到图像未加载
- 停止setInterval直到事件再次发生
- 创建一个带有setInterval块的JS函数,直到timer消失
- 如何阻止下一行执行,直到SetInterval循环被清除