如何使一个与jquery延迟对象一起工作的函数表现得像一个同步函数?

时间:2012-03-27 22:03:21

标签: javascript jquery asynchronous

我有一个从promise对象返回deferred的API。

问题是调用者应该同步行为。作为向团队呈现的选项,我如何使调用函数同步运行?

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

     // insert magic here

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

3 个答案:

答案 0 :(得分:1)

JS中没有办法创建等待异步结果的阻塞调用。您必须更改呼叫者才能进行回叫

答案 1 :(得分:1)

如果你真的需要等待延迟解决那个问题,那就像你在没有jQuery的情况下那样做:

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

答案 2 :(得分: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
});