Running a synchronous call is usually a malpractice, as you are effectively running a request while losing all the benefits for asynchronicity, when you could be using callbacks to do the same thing in an asynchronous fashion.
async:false
will cause the jQuery.ajax()
call to block until it returns. Effectively, in pseudocode, instead of this:
function ajax:
perform request
callback with results
You are doing this:
function ajax:
perform request
while (no results) wait
return results
This completely blocks the execution of anything else until this is over...which is pretty horrible. The obvious use case for it is running stuff in a waterfall
pattern: task 1 -> task 2 -> task 3
, which can happen.
If you can afford to block your browser, still consider using callbacks. They will allow you to keep the rest of your site active and well, while processing stuff. You can easily do this by setting async:true
and providing a callback with your next step. You may end up in a callback spaghetti, however, and may want to use a library to manage large operations if you have them.
A very good candidate for this hails from Node.JS and is called async.js
. It is the tool for MapReduce stuff, and implements both waterfall
and parallel
running models.
Morale of the story: async:false can 100% of the time be replaced with a callback.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…