2012-09-27 11 views
6

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?

+3

Non so cosa faccia il vostro differito, ma sembra che dovreste sbarazzartene. I differimenti sono per comportamenti asincroni non bloccanti. – bfavaretto

risposta

4

ho ottenuto un very helpful answer dalla mailing list dojo interesse personale, così ho pensato mi piacerebbe restare qui:

Purtroppo, non è possibile farlo nel browser.

JavaScript nel browser è a thread singolo. Se sei seduto in attesa di a Differito da risolvere, allora stai usando quel thread. Questo è lo stesso thread che sarà necessario da qualche parte lungo la linea per eseguire una chiamata a Deferred.resolve() (che, a sua volta, darebbe quindi una chiamata alla funzione passata a .then()).

È possibile chiamare xhr in modo sincrono perché l'implementazione di base del XHR get consente di chiamarlo in modo sincrono. La funzionalità di dojo/differito è solo un wrapper attorno agli interni XHR.

Problemi correlati