Reputation: 3502
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
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