项目中少不了的异步封装

713 阅读3分钟


在我们刚学习js的时候,就知道了js是单线程的,代码是有顺序之言的,但是在实际的项目中,我们需要将同步的代码转化成异步执行,再或者说当一些函数涉及到不再是过程性的执行,而是存在一定的先后顺序的时候,解决单线程的方法,目前有两种一个是异步封装,还有一种是利用多线程.

今天,我们就来说说异步封装,说到异步,就少不了Promise。

1.Promise介绍:

ES6 规定,Promise对象是一个构造函数,用来生成Promise实例,针对所有的异步。通过对同步函数的封装,转化成异步的函数

Promise有三个状态:Pending:异步的事情正在执行;Resolve:异步的事情成功了;Reject:异步的事情失败了。

2.Promise的应用场景

2.1省市区的请求函数的调用的顺序性的问题

在我之前的项目里面,有这样的一个场景,就是在mouted中请求获取所有省的数据,当watch监听到选中省时将获取的id再请求对应的市的数据,相应的将获取到市的id去请求对应区的数据。效果图如下:

image.png

image.png

就像上图一样,需要一层一层的有顺序的发请求,那么这就需要了promise封装

image.png

resolve和reject是promise形参函数的形参函数,代表的向外界发送成功的信号和失败的信号,并可以将数据通过函数传参传递出去,那么在外界调用该函数的时候,可以通过打点调then获取成功状态以及成功传递的数据res,或者打点调catch,可以获得err。这样这个函数就是一个异步的函数,是不是很简单。

2.2多个表单同时验证

可能会有这样的情况出现,就是有多个表单同时对多个表单进行验证,只有当多个表单都为成功的状态才是整体验证通过,面对这样的情况,我想到的是将这多个表单的formname组成一个数组,循环这个数组验证,验证的结果再push到一个数组中,并且该方法利用promise封装,return的是一个promise对象,问题迎刃而解。。。

image.png

上面利用的是promise.all对于所有的promise表单是否通过校验的数组进行判断,只有当数组都为resolve才表示表单验证通过

2.3回调地狱

对于nodejs中异步函数少不了回调,在编写的过程,利用回调可以将异步的数据带出来,得到异步函数执行完后得到的数据。

从一定程度上来说,回调地狱能解决问题,但是有缺点,或者说不优雅,阅读性非常差。

例如:


image.png

在这里我是通过promise来解决回调地狱的,当也可以通过promise的语法糖async-await,实际上他的内部的封装就是promise

image.png

今天对于最近在项目中的promise的应用场景的总结,就到这里啦,只是个人心得分享给需要的人。