jQuery “.then()” is not sequent, and not working as expected
I need to call three functions one by one. For this purpose i am using jquery deferred "then" to chain the calls.
Here is the code:
- function fillQuality(x){
- console.log('Q');
- var deferred = jQuery.Deferred();
- var intervalId = setInterval(function(){
- clearInterval(intervalId);
- console.log("Quality: ", x);
- deferred.resolve();
- }, 2000);
- return deferred.promise();
- };
- function fillPrize(x){
- console.log('P');
- var deferred = jQuery.Deferred();
- var intervalId = setInterval(function(){
- clearInterval(intervalId);
- console.log("Prize: ", x);
- deferred.resolve();
- }, 2000);
- return deferred.promise();
- };
- function fillSection(x){
- console.log('S');
- var deferred = jQuery.Deferred();
- var intervalId = setInterval(function(){
- clearInterval(intervalId);
- console.log("Section: ", x);
- deferred.resolve();
- }, 2000);
- return deferred.promise();
- };
- var promise = jQuery.when().promise();
- promise = promise.then(fillQuality).then(fillPrize).then(fillSection);
- promise.done(function(){
- console.log('done');
- });
In this case i supposed to have following output:
Q
Quality: undefined
P
Prize: undefined
S
Section: undefined
done
But in fact I have received:
Q
P
S
done
Quality: undefined
Prize: undefined
Section: undefined
As I see jQuery calls all three functions and ignore promise resolving.
What I am doing wrong?
Or what I don't know about jquery promises?
Thanks.