由于JavaScript负责解释执行的主线程是单线程的,所以如果遇到耗时比较大的任务则会导致后面的任务阻塞。所以将任务分为了异步任务和同步任务,异步任务又被分为宏任务和微任务。异步任务可以解决阻塞的问题但也会带来执行的不确定性。异步任务也叫异步编程最开始时使用的回调函数进行处理,但如果异步任务进行多层嵌套则会导致回掉地狱,不直观强耦合,回调的不确定性且不利于维护和复用,后续则出现了Promise解决回调地狱采用链式调用,并采用then方法保证了执行的顺序,且Promise也能保证每次返回的都是一个新的Promise;但这种方式还是不够简明—如果执行then方式链式调用太多则会造成代码的语义不够明确,所以出现了async & await的方式将异步任务写的像同步任务更加直观,async中可以有多个异步任务,async中一旦遇到异步任务则会抛出一个pending状态的Promise,并且暂时返回代码的执行权,使得函数外的代码得以继续执行,这是解决非阻塞的方式。等待异步任务执行resolve了或者reject了之后才会接着执行async函数内剩下的部分,保证了顺序的执行。
注意📢:我们所说的将异步任务写的像同步任务指的是async内部的函数像同步函数一样执行,而不是它会阻塞主线程一直等待异步任务完成。主要区分async函数内阻塞,而函数外不阻塞。
👌🏻今天就学到这里了。