Javascript 有没有办法强制延迟()同步执行?

Javascript 有没有办法强制延迟()同步执行?,javascript,jquery,jquery-deferred,Javascript,Jquery,Jquery Deferred,代码中的其他地方有这样一个: function getMyDeferred() { var deferred = $.Deferred(); $.ajax(url, { success: function(data) { deferred.resolve(data); } }); return deferred; } 在我的代码中,我访问这个方法并得到一个延迟对象。有没有办法强迫它在当前行等待,直到延迟完成

代码中的其他地方有这样一个:

function getMyDeferred() {
    var deferred = $.Deferred();
    $.ajax(url, {
        success: function(data) {
            deferred.resolve(data);
        }
    });
    return deferred;
}
在我的代码中,我访问这个方法并得到一个延迟对象。有没有办法强迫它在当前行等待,直到延迟完成?我意识到这可能违背了承诺和尊重的整个哲学,但我能做到吗?大概是这样的:

var deferred = getMyDeferred();

// do something here to ensure we do not proceed to the
// next step until deferred has been resolved

nextStep();
试试这个:

getMyDeferred().done(nextStep);
你说得对

我意识到这可能违背了整个哲学 承诺和遵守

但是,您可以使用async:false选项

通过jQuery文档

默认情况下,所有请求都是异步发送的,即设置为 默认情况下为true。如果需要同步请求,请将此选项设置为 错误的跨域请求和数据类型:jsonp请求不会 支持同步操作。请注意,同步请求可能会 暂时锁定浏览器,禁用请求时的任何操作 它是活动的。从jQuery1.8开始,在jqXHR中使用async:false $。已弃用延迟的;您必须使用success/error/complete命令 回调选项,而不是jqXHR的相应方法 对象,例如jqXHR.done或不推荐使用的jqXHR.success


因此,在阅读了人们的答案、评论,并亲自做了更多的研究之后,我最初的问题的答案是:不,没有


我最欣赏Fabricio Matté的评论,他向我指出了一些我一眼就没注意到的东西:我正在使用的单元测试框架已经为异步测试提供了内置选项,所以我不需要做我在这里概述的事情。

只需使用同步ajax即可?Ofc这是一种不好的做法,不建议这样做,但如果这是您想要的..Fabricio,出于所有意图和目的,假设我无权更改关于第一个代码块的任何内容。我只有第二个。我实际上在做的是单元测试,所以我需要它等待一个响应,然后才能对这个响应做任何事情。哦,我明白了。不过,大多数单元测试框架都允许异步测试。是否正在包装代码。然后是太多的样板文件?这是处理承诺的普遍接受的方式。我想您可以调用defer.donenextStep;。请参阅我上面的评论,其中解释说,出于所有目的和目的,我无权修改那个Ajax调用。你可以用deferred.done。
function getMyDeferred() {
    var deferred = $.Deferred();
    $.ajax(url, {
        async: false,
        success: function(data) {
            deferred.resolve(data);
        }
    });
    return deferred;
}