最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - wait for function done (with setInterval) and run next function - Stack Overflow

programmeradmin2浏览0评论

how to run next function after first done with setInterval?

for example:

step1();
step2();

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

please help me with solution!

how to run next function after first done with setInterval?

for example:

step1();
step2();

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

please help me with solution!

Share Improve this question edited Mar 2, 2016 at 1:14 Jefferson 1,5591 gold badge18 silver badges24 bronze badges asked May 10, 2015 at 14:21 bsbakbsbak 7731 gold badge7 silver badges19 bronze badges 3
  • 1 possible duplicate of jquery delay between javascript functions – renakre Commented May 10, 2015 at 14:22
  • 1 Are you sure about setInterval() or you mean setTimeout() – Tushar Commented May 10, 2015 at 14:23
  • promisify your functions, dont rely on setInterval or setTimeout – Avraam Mavridis Commented May 10, 2015 at 14:25
Add a ment  | 

3 Answers 3

Reset to default 4

Edit: This is an old answer. Now you can achieve this using promises also but the code will be slightly different.

If you don't want to use a promise you can use a simple flag to achieve such a thing. Please see example below:

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);

If you want to chain functions on pletion you can use callback functions.

Example:

 function first(callback) {
      console.log('Running first');

      if (callback) {
           callback();
      }
 }

 function second() {
      console.log('Running second function');
 }

 first(second);

The first function checks if a callback is used and then runs it. If there is no callback function nothing happens. You can chain functions this way. You can also use anonymous functions.

 first(function () {
      console.log('This function that will run after the first one);
 });

If you use setTimeout() you can't be sure whether the previous function has pleted. A better way would be to use promises.
Understanding Promises
I hope I understood your question right. Good luck!

First of all setInterval can not be done by itself, it will fire infinitely if you not clear it with clearInterval.

But if you have some async action inside your function and whant to wait for it and then call another function you may just promisify it like Avraam Mavridis suggested.

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);

JsFiddle

发布评论

评论列表(0)

  1. 暂无评论