Wiem, że zalecanym sposobem użycia Dojo Deferreds jest użycie dojo.when (def) lub def.then() i zapewnienie wywołania zwrotnego w przypadku rozwiązania Odroczonego. Czasami jednak natrafiam na scenę, w której naprawdę muszę poczekać na zakończenie Odroczonego, zanim przejdę do bieżącego wątku. Oto przykład (pełna przykładów na http://jsfiddle.net/DG3Ax/2/)Jak mogę zablokować do czasu rozwiązania Dojo odroczonego?
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");
Oczywiście Deferred.gimmeTheResultNow()
nie istnieje, ale to funkcjonalność szukam. Nie mam kontroli nad kodem wywołującym getSomething(), więc nie mogę zmusić go do odroczenia; potrzebuje prawdziwego wyniku.
Wiem, że xhrGet() ma parametr synchronizacji, który moim zdaniem wykonałby zadanie, gdyby było to wywołanie AJAX, ale niekoniecznie tak jest. Czy jest jakiś inny sposób, aby to osiągnąć?
Nie wiem, co zrobiłeś, ale wydaje się, że powinieneś się go pozbyć. Odroczone są za zachowania nieblokujące, asynchroniczne. – bfavaretto