Недавно я работаю над проектом, который использует SetInterval и SetTimeoutJavascript: Как предотвратить следующую строку, выполненную до тех пор, пока цикл SetInterval не станет clearinterval?
Вот простой код: (Примечание: 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();
Я пытаюсь убедитесь, что функцияD будет выполняться только после того, как loop1 завершится с clearInterval, он не может быть выполнен, когда функция B и functionC все еще находятся в цикле, и только когда функция D выполняется, функция Main будет ждать 16000 мс и снова перезапустить.
Я пробовал много способов с setInterval и setTimeout, но не повезло. Любой эксперт javascript знает, как это сделать?
'loop1' выходит за рамки в' functionB'. – Li357
Используйте обратный вызов, чтобы дать сигнал, когда он будет готов. – Bergi