Sé que el caso de uso recomendado para Dojo Deferreds es usar dojo.when (def) o def.then() y proporcionar una devolución de llamada para cuando se resuelva el aplazado. Sin embargo, a veces me encuentro con una situación en la que realmente tengo que esperar a que se complete ese Deferred antes de continuar con el hilo actual. He aquí un ejemplo (ejemplo completo en http://jsfiddle.net/DG3Ax/2/)¿Cómo puedo bloquear hasta que se resuelva Dojo Deferred?
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");
Obviamente no existe Deferred.gimmeTheResultNow()
, pero esa es la funcionalidad que estoy buscando. No tengo control del código llamando a getSomething(), así que no puedo hacer que maneje un Deferred; necesita el resultado real.
Sé que xhrGet() tiene un parámetro de sincronización que creo que haría el trabajo si se tratara de una llamada AJAX, pero ese no es necesariamente el caso. ¿Hay alguna otra forma de lograr esto?
No sé lo que hace su diferido, pero parece que debería deshacerse de él. Los diferidos son para comportamientos asincrónicos sin bloqueo. – bfavaretto