1.首先咱们来搞清楚js为什么是单线程
异步还得从js语言特性开始,因为js是单线程语言,那么可能就迷糊了,为啥js是单线程语言啊?
答案:因为js主要是做用户交互效果的,对浏览器的一些元素就行操作。我们假设js是多线程的,我这里有两个线程,一个要对id="div"的div元素进行删除操作,我同时还有一个线程要对这个div进行插入操作,我想在里面插入一个a元素,你想想浏览器它不就崩溃了,我到底听谁的?
现在我们想一下单线程的情况,我只有一个线程,同时只能顺序的执行一个操作,我先把div删除了,我后面想给这个div加元素,就失败了,因为div没了,也就不会冲突。
**
2.啥是异步啊
js是单线程,顺序执行的,比如我有100行代码,我在第50行给服务器发了个请求,“服务器给我数据,我要数据”。服务老了耳背,“啥!?马什么梅?”。过了十万八千年才给你回应。这时候你后面一半的代码还要等老年服务器反映过来才执行。这就是单线程的毛病了
为了解决问题这时候就有了异步操作,我在50行给老年服务器发了请求,我不管服务器的处理时间,我把这个任务丢到任务队列里去,服务器自己玩,好了叫我。然后这个时候就执行51行以后的代码,这就叫异步。等我执行到75行,服务器说我找到马冬梅了,这时候我们就重新执行,执行栈中的这个请求的后续步骤。
**