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

How do I make a function that works with a jquery deferred object behave like a synchronous function?

本文关键字:函数 同步 工作 何使 jquery 延迟 一起 对象      更新时间:2023-09-26

我有一个API,它从一个延迟对象返回一个promise。

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

var foo = function() {
     var promise = returnsPromise();
     promise.done().fail();
     // insert magic here
     // function returns when either done() or fail() is completed.
}

如果您真的需要等待延迟的问题在那一点上得到解决,只需像没有jQuery:一样执行即可

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

在JS中没有办法创建等待异步结果的阻塞调用。您必须更改调用者以进行回调,而不是

您可以在延迟对象完成或失败后使用.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
});