2012-03-27 64 views
1

我有一個API從deferred對象返回promise如何使一個與jQuery延期對象一起工作的函數的行爲像一個同步函數?

問題是調用者應該同步行爲。作爲提供給團隊的一個選項,我將如何使調用函數同步行爲?

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

    // insert magic here 

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

見http://stackoverflow.com/questions/10664466/syntax-for-jquery-deferred-making-synchronous-function-return-promise – robbie613 2012-11-25 20:59:31

回答

1

如果你真的需要等待延遲在這一點上解決,只是不正是你會做沒有jQuery的:

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

JS沒有辦法創建阻塞調用來等待異步結果。您必須更改來電者才能進行回撥

0

您可以使用.always()在延遲對象完成或失敗後執行某些操作。這是一個"done-fail-always",同義"success-error-complete""try-catch-finally"

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

那麼你調用foo這樣的:

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

這是異步的。這個問題要求同步。 – 2015-05-11 01:21:26

相關問題