2012-03-27 2 views
1

Ich habe eine API, die eine promise von einem deferred Objekt zurückgibt.Wie mache ich eine Funktion, die mit einem verzögerten jquery-Objekt funktioniert, verhält sich wie eine synchrone Funktion?

Das Problem ist, dass der Aufrufer sich synchron verhalten soll. Als Option, dem Team zu präsentieren, wie würde ich die Calling-Funktion dazu bringen, sich synchron zu verhalten?

var foo = function() { 
    var promise = returnsPromise(); 
    promise.done().fail(); 

    // insert magic here 

    // function returns when either done() or fail() is completed. 
} 
+0

See http://stackoverflow.com/questions/10664466/syntax-for-jquery-deferred-making-synchronous-function-return-promise – robbie613

Antwort

1

Wenn Sie wirklich für die latenten müssen warten, an diesem Punkt zu lösen, nicht nur genau das, wie Sie täte es ohne jQuery:

while (!promise.isResolved() && !promise.isRejected()) { } 
1

Es gibt keine Möglichkeit in JS, einen blockierenden Aufruf zu erstellen, der auf ein asynchrones Ergebnis wartet. Sie müssen den Anrufer stattdessen zu einem Rückruf wechseln.

0

Sie können .always() verwenden, um etwas auszuführen, nachdem das verzögerte Objekt entweder ausgeführt wurde oder fehlgeschlagen ist. es ist ein "done-fail-always", ein Synonym für "success-error-complete" und "try-catch-finally"

var foo = function(callback) { 
    var promise = returnsPromise(); 
    promise.done().fail().always(function(){ 
     //do magic 
     callback(); 
    }); 
} 

dann rufen Sie foo wie:

foo(function(){ 
    //the magic you want done after a done or fail 
}); 
+0

Das ist asynchron. Die Frage fragt nach synchron. –

Verwandte Themen