异步
2025年7月3日,终于将JS的异步请求搞懂
异步调用
其实异步调用是可以并发性的处理一个需求,这往往会涉及到多线程,lambda表达式的知识点
异步调用会提前定义一个回调函数,当异步调用返回结果时,再来触发由用户定义的回调函数,实现异步调用
那么回调函数本身就是非常适合Lambda表达式来完成编写的
在.NET框架中,有await和async的语法糖来实现异步调用,其本质是多线程
在Spring的框架中,一个请求严格是一个线程,但可以通过SpringAsync将异步任务交给别的程序执行
在C#语法中,有委托来解决强类型语言来编写回调函数的问题
在Java中,有函数式接口来解决强语言类型编写回调函数的问题
但JS中,无需这些,因为Javascript是弱语言类型,其回调函数可以随便定义
虽然JS是单线程执行,但可以通过浏览器的多线程去异步的调用一些API,例如Axios就是异步调用
js的异步操作进行的是相对较多的,在之后为了解决回调地域的问题,ES推出了Promise来解决
Promise中又提供了catch语法糖,这样,then来解决成功,catch来解决失败,条理已经和清晰明了
后来,出现了await,async的语法糖,让异步调用结构清晰,使用方便
最佳实践
举例在Axios的请求中,如果有两个异步操作具有数据依赖关系,我们可以通过await语法糖将其写成类同步的操作,将其有顺序执行
在并发的异步操作中,我们可以使用多个.then和.catch写多个请求的方式,就是并发的异步请求
我们也可以通过async语法,在最后promise.all中使用await获取所有异步调用的结果值,也是处理并发的很好方案
异步
http://blog.170827.xyz/2025/07/03/异步/