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!