Jabb
Jabb

Reputation: 3502

How to use the promise / deferred pattern properly

I am trying to chain two functions test1 and test2 that need to complete (first test1 and then test2) before a third function is called.I have trouble applying the promise/deferred pattern in jquery. can anyone help?

function test1(){
    setTimeout(function() {
        console.log("test1");
        return 1;
    }, 10000);
}

function test2(){
    setTimeout(function() {
        console.log("test2");
        return 2;
    }, 10000);
}


var promise1 = test1().promise();
var promise2 = test2().promise();

when(
    promise1,
    promise2
).then(function(a,b) {
    console.log("test1 and test2 done");
});

Upvotes: 1

Views: 1842

Answers (1)

Arun P Johny
Arun P Johny

Reputation: 388316

You have not used any promise framework in your code...

One way is to use jQuery Deferred() like

function test1() {
  //create a deferred object
  var deferred = $.Deferred()
  setTimeout(function() {
    //once the taks is completed mark the promise as resolved
    deferred.resolve(1);
  }, 2000);
  //return the promise object
  return deferred.promise();
}

function test2() { //create a deferred object
  var deferred = $.Deferred()
  setTimeout(function() {
    //once the taks is completed mark the promise as resolved
    deferred.resolve(2);
  }, 1000); //return the promise object
  return deferred.promise();
}


var promise1 = test1();
var promise2 = test2();

$.when(promise1, promise2).then(function(a, b) {
  console.log("test1 and test2 done", a, b);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>


Other possible solutions for promises are

Upvotes: 3

Related Questions