If the promise is already resolved / rejected, the new callbacks are executed synchronously.
From the jQuery.deferred()
doc:
Once the object has entered the resolved or rejected state, it stays in that state. Callbacks can still be added to the resolved or rejected Deferred — they will execute immediately.
Demo (Fiddle):
var def = jQuery.Deferred(),
promise = def.promise();
console.log('before 1');
promise.done(function () {
console.log('done 1');
});
console.log('after 1');
def.resolve();
console.log('before 2');
promise.done(function () {
console.log('done 2');
});
console.log('after 2');
Output:
before 1
after 1
done 1
before 2
done 2
after 2