jQuery “.then()” is not sequent, and not working as expected

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:

  1. function fillQuality(x){
  2.     console.log('Q');
  3.     var deferred = jQuery.Deferred();
  4.     var intervalId = setInterval(function(){
  5.         clearInterval(intervalId);
  6.         console.log("Quality: ", x);   
  7.         deferred.resolve();
  8.     }, 2000);
  9.     return deferred.promise();
  10. };

  11. function fillPrize(x){
  12.     console.log('P');
  13.     var deferred = jQuery.Deferred();
  14.     var intervalId = setInterval(function(){
  15.         clearInterval(intervalId);
  16.         console.log("Prize: ", x);   
  17.         deferred.resolve();
  18.     }, 2000);
  19.     return deferred.promise();
  20. };

  21. function fillSection(x){
  22.     console.log('S');
  23.     var deferred = jQuery.Deferred();
  24.     var intervalId = setInterval(function(){
  25.         clearInterval(intervalId);
  26.         console.log("Section: ", x);   
  27.         deferred.resolve();
  28.     }, 2000);
  29.     return deferred.promise();
  30. };

  31. var promise = jQuery.when().promise();
  32. promise = promise.then(fillQuality).then(fillPrize).then(fillSection);
  33. promise.done(function(){
  34.     console.log('done');
  35. });
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.