代码中的其他地方就是这样:
function getMyDeferred() {
var deferred = $.Deferred();
$.ajax(url, {
success: function(data) {
deferred.resolve(data);
}
});
return deferred;
}
在我的代码中,我正在访问此方法并获取Deferred对象。有没有办法迫使它在当前行等待,直到延迟完成为止?我意识到这可能违背了承诺和延期的整个哲学,但我能做到吗?像这样:
var deferred = getMyDeferred();
// do something here to ensure we do not proceed to the
// next step until deferred has been resolved
nextStep();
答案 0 :(得分:1)
试试这个:
getMyDeferred().done(nextStep);
答案 1 :(得分:1)
你是对的。
我意识到这可能违背了整个哲学 承诺和推迟
但是,您可以使用“ async:false ”选项。
function getMyDeferred() {
var deferred = $.Deferred();
$.ajax(url, {
async: false,
success: function(data) {
deferred.resolve(data);
}
});
return deferred;
}
通过jQuery文档(http://api.jquery.com/jquery.ajax/)
默认情况下,所有请求都是异步发送的(即设置为 默认为true)。如果需要同步请求,请将此选项设置为 假。跨域请求和dataType:“jsonp”请求没有 支持同步操作。请注意,同步请求可能 暂时锁定浏览器,在请求时禁用任何操作 活跃。从jQuery 1.8开始,使用async:false和jqXHR ($ .Deferred)已弃用;你必须使用成功/错误/完成 回调选项而不是jqXHR的相应方法 对象如jqXHR.done()或不推荐使用的jqXHR.success()。
答案 2 :(得分:0)
因此,在阅读了人们的答案,评论以及自己做更多研究之后,我原来问题的答案就是不,没有。
我最赞赏FabrícioMatté的评论,它向我指出了一些我刚看不到的东西:我正在使用的单元测试框架已经内置了异步测试选项,所以我不知道我需要做我在这里概述的内容。