Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/419.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 等待函数完成(使用setInterval)并运行下一个函数_Javascript_Jquery - Fatal编程技术网

Javascript 等待函数完成(使用setInterval)并运行下一个函数

Javascript 等待函数完成(使用setInterval)并运行下一个函数,javascript,jquery,Javascript,Jquery,第一次使用setInterval完成后,如何运行下一个函数 例如: step1(); step2(); setInterval(step1, 1000).done(function() { setInterval(step2, 1000).done( /* next step */); }); 请帮我解决问题 如果要在完成时链接函数,可以使用回调函数 例如: 第一个函数检查是否使用了回调,然后运行它。如果没有回调函数,则什么也不会发生。您可以通过这种方式链接函数。 您还可以使用匿名

第一次使用setInterval完成后,如何运行下一个函数

例如:

step1();
step2();

setInterval(step1, 1000).done(function() { 
    setInterval(step2, 1000).done( /* next step */);
});

请帮我解决问题

如果要在完成时链接函数,可以使用回调函数

例如:

第一个函数检查是否使用了回调,然后运行它。如果没有回调函数,则什么也不会发生。您可以通过这种方式链接函数。 您还可以使用匿名函数

 first(function () {
      console.log('This function that will run after the first one);
 });
如果使用setTimeout(),则无法确定上一个函数是否已完成。更好的方法是使用承诺。


我希望我正确理解了你的问题。祝你好运

首先,setInterval本身无法完成,如果您不使用clearInterval清除它,它将无限激发

但是,如果您的函数中有一些异步操作,您需要等待它,然后调用另一个函数,那么您可以像建议的那样提示它

function step1() {
    var deferred = $.Deferred();
    setTimeout(function () {
        alert('I am step 1');
        deferred.resolve();
    }, 1000);
    return deferred.promise();
}

function step2() {
    alert('I am step 2');
}

step1().done(step2);

您可以使用一个简单的标志来实现这样的目标。请参见下面的示例:

var flag = true;

function step1() {
  console.log('title');
}

function step2() {
  console.log('subtitle');
}

function wrapper() {
  if(flag) {
    step1();
  } else {
    step2();
  }
  flag = !flag;
}

setInterval(wrapper, 30000);

是否确定
setInterval()
或您的意思是
setTimeout()
promisify
您的函数是否重复,请不要依赖
setInterval
setTimeout
var flag = true;

function step1() {
  console.log('title');
}

function step2() {
  console.log('subtitle');
}

function wrapper() {
  if(flag) {
    step1();
  } else {
    step2();
  }
  flag = !flag;
}

setInterval(wrapper, 30000);