składnia dla Jquery.deferred, co zapewnia obietnicę powrotu funkcji synchronicznej

Szybkie pytanie, jak używać Jquery.deferred do powolnej funkcji synchronicznej, zwraca zamiast tego obietnicę. Do tej pory zrobiłem to:

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

sayIt (2000) zawsze przechodzi, ale funkcja powiązana po „wtedy” nigdy nie odpala.

Jeśli to zrobię:

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

„ah” pojawia się od razu, a potem „to, co mówię” 2000 ms później - chcę oczywiście odwrotnie - po dwóch sekundach otrzymuję „to, co mówię”, a potem „ah” zaraz po.

Wszelkie sugestie mile widziane!

questionAnswers(2)

yourAnswerToTheQuestion