bsbak
bsbak

Reputation: 773

wait for function done (with setInterval) and run next function

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!

Upvotes: 3

Views: 5407

Answers (3)

TeaCoder
TeaCoder

Reputation: 1977

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

Upvotes: 4

Alex  Sidorenko
Alex Sidorenko

Reputation: 546

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

Upvotes: 0

Dulev
Dulev

Reputation: 93

If you want to chain functions on completion 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 completed. A better way would be to use promises.
Understanding Promises
I hope I understood your question right. Good luck!

Upvotes: 0

Related Questions