运行同步调用通常是一种弊端,因为当您可以使用回调以异步方式执行相同的操作时,您在有效地运行请求的同时失去了异步性的所有好处。
async:false将导致jQuery.ajax()调用阻塞,直到它返回。实际上,在伪代码中,而不是这样:
function ajax:
perform request
callback with results
你正在这样做:
function ajax:
perform request
while (no results) wait
return results
这完全阻止了其他任何事情的执行,直到结束……这非常可怕。它的明显用例是以waterfall模式运行东西:task 1 -> task 2 -> task 3,这可能发生。
如果您有能力阻止您的浏览器,仍然可以考虑使用回调。它们将允许您在处理内容时保持站点的其余部分活跃且良好。async:true您可以通过设置并在下一步中提供回调来轻松做到这一点。但是,您最终可能会遇到回调意大利面,并且可能希望使用库来管理大型操作(如果有的话)。
一个非常好的候选者来自 Node.JS,被称为async.js. 它是MapReduce 东西的工具,并实现了这两个模型waterfall和parallel运行模型。
故事的精神: async:false 可以 100% 的时间被回调替换。