So che il caso d'uso consigliato per Dojo Deferreds è usare dojo.when (def) o def.then() e fornire una callback per quando il Deferred è risolto. Tuttavia, a volte mi imbatto in uno scenario in cui ho davvero bisogno di aspettare quel Deferred per completare prima di continuare con il thread corrente. Ecco un esempio (esempio completo a http://jsfiddle.net/DG3Ax/2/)Come posso bloccare fino a quando Dojo Deferred non viene risolto?
function getSomething() {
var def = getSomeDeferred();
def.then(function(result) {
dojo.place("<li>def.then() = " + result + "</li>", "output");
});
return def.gimmeTheResultNow();
}
dojo.place("<li>getSomething() = " + getSomething() + "</li>", "output");
Ovviamente Deferred.gimmeTheResultNow()
non esiste, ma che è la funzionalità che sto cercando. Non ho il controllo del codice che chiama getSomething(), quindi non riesco a farlo gestire un Deferred; ha bisogno del risultato reale.
So che xhrGet() ha un parametro di sincronizzazione che penso faccia il lavoro se si trattasse di una chiamata AJAX, ma non è necessariamente così. C'è qualche altro modo per realizzare questo?
Non so cosa faccia il vostro differito, ma sembra che dovreste sbarazzartene. I differimenti sono per comportamenti asincroni non bloccanti. – bfavaretto