有没有办法强制Deferred()同步执行
Is there a way to force a Deferred() to execute synchronously?
代码中的其他地方有这样的内容:
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();
你是对的。
我意识到这可能违背了承诺和延期
但是,您可以使用选项"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)。如果需要同步请求,请将此选项设置为false。跨域请求和数据类型:"jsonp"请求不支持同步操作。请注意,同步请求可能暂时锁定浏览器,在请求时禁用任何操作处于活动状态。从jQuery 1.8开始,在jqXHR中使用async:false($.Deferred)已弃用;您必须使用成功/错误/完成回调选项,而不是jqXHR的相应方法对象,如jqXHR.done()或不推荐使用的jqXHR.success().
试试这个:
getMyDeferred().done(nextStep);
所以,在阅读了人们的答案、评论并自己做了更多的研究之后,我最初问题的答案只是不,没有。
我最欣赏Fabrício Matté的评论,它向我指出了一件我第一眼没有注意到的事情:我正在使用的单元测试框架已经有了异步测试的内置选项,所以我不需要做我在这里概述的事情。
相关文章:
- ajax调用获胜't同步执行
- JavaScript 函数同步执行
- 是否有一种方法可以在节点中同步执行多个JavaScript文件
- 如何使用$q promise同步执行FOR LOOP
- Node.js for 循环,带有回调,之后同步执行
- javascript同步执行
- 骨干,马里内特-同步执行
- ES6类和同步执行
- 有没有办法强制Deferred()同步执行
- 有没有任何方法可以同步执行gap.client.request
- 如何使节点同步执行
- 如何识别回调是同步执行还是异步执行
- 为什么String的split方法在NodeJS中是同步执行的
- 如何在Chrome扩展中同步执行外部js文件
- 在sharepoint javascript模型的每个循环中同步执行QueryAsync
- 正在同步执行异步函数
- Promise中同步执行的顺序
- 在Javascript中将函数更改为同步执行
- JavaScript:同步执行一系列承诺
- 同步执行Sequelize查询