gpt4 book ai didi

Javascript:如何防止在 SetInterval 循环被清除之前执行下一行?

转载 作者:行者123 更新时间:2023-12-03 06:03:27 25 4
gpt4 key购买 nike

最近我正在做一个使用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();

我试图确保functionD只会在loop1以clearInterval结束后才会被执行,当functionB和functionC仍在循环中时它不能被执行,并且只有当functionD被执行时,函数Main才会等待16000ms然后重新启动。

我尝试了很多 setInterval 和 setTimeout 的方法,但没有成功。任何 javascript 专家都知道如何做到这一点吗?

最佳答案

当你想要这个时:

  1. 运行函数A()
  2. 每 4 秒并行运行一次 functionB() 和 functionC()
  3. 当停止运行 functionB() 和 functionC() 时,然后运行 ​​functionD 一次
  4. 当 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();

关于Javascript:如何防止在 SetInterval 循环被清除之前执行下一行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39652072/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com