你为什么认为:
doSomethingBeforeRequest();
response = synchronousAjax();
doSomethingToTheDataAfterRequest(response);
,许多 “简单” 比:
doSomethingBeforeRequest();
properAjax(onSuccess(response){
doSomethingToTheDataAfterRequest(response);
};
为您的团队?我不是想争辩,但我很好奇的理由...
我能想到的同步代码的唯一好处是,你保存了一些花括号;以冻结浏览器为代价。
如果浏览器在请求*之前没有完成重绘,我能想到的唯一选择是使用延迟(如BenSwayne所建议的);这会使代码与异步调用一样复杂,并且在请求期间仍使浏览器无响应。
EDIT(某种答案的):
由于JavaScript的缺乏线程;超时和ajax调用(它允许浏览器在运行之前执行其他操作;有点像使用线程语言中的sleep()),这对于如何编写JavaScript非常重要。我知道它起初可能有点学习曲线(我知道我很困惑),但是没有任何明智的方法可以避免学习它。
我知道一个人可能会试图进行同步调用的情况是,有几个请求必须依次发送到服务器;但你可以做到这一点异步过,通过嵌套几个电话是这样的:
doSomethingBeforeRequest1();
ajax(onSuccess(response1){
doSomethingToTheDataAfterRequest1(response1);
ajax(onSuccess(response2){
doSomethingToTheDataAfterRequest2(response2);
};
};
但是,除非每次通话是相当缓慢完成,并要标明每一步什么进展;我宁愿建议您创建一项新服务,将两个操作与一个呼叫结合起来。 (如果您在其他一些情况下仍然需要单独使用这些服务,则该服务可以按顺序使用两个现有服务)。
(*我更惊讶的是,Firefox没有更新DOM ...)