一般什么情况下需要用到「异步」?
现有三个函数,taskA()、taskB()和taskC(),三个任务互不影响。
taskA和taskC执行得比较快,taskB执行得比较慢,耗时5秒。
// 同步的写法 function taskB() { var response = $.ajax({ url: "./data.json", async: false // 表示同步 }) return response // 五秒后,返回response } taskA() taskB() taskC()
taskC必须要等taskB执行完了才能执行,这就是「同步」。
执行顺序是:
A -> B -> AJAX请求 -> C -----------
我们将其换成「异步」:
// 异步的写法 function taskB() { var result = $.ajax({ url: "./data.json", async: true // 异步 }) return result // 一定要注意,现在的 result 不是上面的 response } taskA() taskB() taskC()
这下执行顺序就变成了:
A -> B -> C -------- -> AJAX 请求 -----------
也就是说,AJAX 请求和任务 C 是同时执行的。
但是我们要注意执行的主体。AJAX 请求是由浏览器的网络请求模块执行的,taskC 是由 JS 引擎执行的。
综上,如果几个任务相互独立,且其中一个任务执行时间较长,那么一般就会用异步方式来做这件事。