Syntax für Jquery.deferred, die eine Rückgabe der synchronen Funktion verspricht

Eine kurze Frage zur Verwendung von Jquery.deferred, damit eine langsame synchrone Funktion stattdessen ein Versprechen zurückgibt. Was ich bisher gemacht habe, ist Folgendes:

function sayIt(ms) {
    setTimeout( function() { console.log('what I say'); }, ms);
} 

function doIt() {
    return $.Deferred( function() { sayIt(2000); }).promise();
}


doIt().then( function() { console.log('ah'); });

Das sayIt (2000) geht immer durch, aber die verkettete Funktion nach dem "dann" wird nie ausgelöst.

Wenn ich das mache:

doIt().then( console.log('ah'));

Das 'ah' kommt sofort und dann das 'was ich sage' 2000ms später - was ich will ist natürlich das Gegenteil - dass ich nach zwei Sekunden 'was ich sage' und dann 'ah' gleich danach bekomme.

Anregungen geschätzt!

Antworten auf die Frage(2)

Ihre Antwort auf die Frage