sintaxe para Jquery.deferred, fazendo promessa de retorno de função síncrona

Uma pergunta rápida sobre como usar o Jquery.deferred para fazer uma função síncrona lenta retornar uma promessa. O que eu fiz até agora é isto:

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'); });

o sayIt (2000) sempre passa, mas a função encadeada depois do 'then' nunca dispara.

Se eu fizer isso:

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

o 'ah' surge imediatamente, e então o 'o que eu digo' 2000ms depois - o que eu quero é claro o oposto - que depois de dois segundos eu recebo 'o que eu digo' e depois 'ah' logo depois.

Qualquer sugestão apreciada!

questionAnswers(2)

yourAnswerToTheQuestion