Ich weiß, dass der empfohlene Anwendungsfall für Dojo Deferreds darin besteht, dojo.when (def) oder def.then() zu verwenden und einen Rückruf für den Fall bereitzustellen, dass der Deferred aufgelöst wird. Manchmal stoße ich jedoch auf ein Szenarium, in dem ich wirklich darauf warten muss, dass Deferred beendet wird, bevor ich mit dem aktuellen Thread fortfahre. Hier ist ein Beispiel (vollständiges Beispiel bei http://jsfiddle.net/DG3Ax/2/)Wie kann ich blockieren, bis Dojo Deferred aufgelöst wird?
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");
Offensichtlich Deferred.gimmeTheResultNow()
nicht vorhanden ist, aber das ist die Funktionalität ich suche. Ich habe keine Kontrolle über den Code, der getSomething() aufruft, also kann ich es nicht mit einem Deferred umgehen; Es braucht das wirkliche Ergebnis.
Ich weiß, dass xhrGet() hat eine Sync-Parameter, die ich denke, würde die Arbeit tun, wenn dies ein AJAX-Aufruf wäre, aber das ist nicht unbedingt der Fall. Gibt es einen anderen Weg, dies zu erreichen?
Ich weiß nicht, was Ihr verzögert tut, aber scheint, wie Sie es loswerden sollten. Verzögerte Werte gelten für nicht blockierendes asynchrones Verhalten. – bfavaretto