sintaxis para Jquery.deferred, que hace que la función síncrona devuelva promesa

Una pregunta rápida sobre cómo usar Jquery.deferred para hacer una función sincrónica lenta devuelve una promesa en su lugar. Lo que he hecho hasta ahora es esto:

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

el sayit (2000) siempre pasa, pero la función encadenada después del "entonces" nunca se dispara.

Si hago esto:

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

el 'ah' aparece enseguida, y luego el 'lo que digo' 2000 ms tarde, lo que quiero es, por supuesto, lo contrario: que después de dos segundos obtengo 'lo que digo' y luego 'ah' justo después.

Cualquier sugerencia apreciada!

Respuestas a la pregunta(2)

Su respuesta a la pregunta