00:00
哈喽,大家好,这个小节呢,我们来学习一下promise。Promise呢?是ES6引入的异步编程的解决方案。啊,是ES里边非常重要的一个内容,也是面试经常问的一个点。关于异步编程,咱之前讲过了,它主要指的是主要指的是一些IO的代码啊,包括咱的文件IO啊,数据库IO,还有呢网络请求。啊,那么这个新的解决方案呢,是干什么呢?它主要是解决之前回调地域的一个问题。啊,咱们知道没有这个生成器promise之前,我们都是层层的回调嵌套啊,形成回调地域这样一个局面。啊,看起来很丑,调试问题起来也很麻烦。啊,有了它们以后呢,咱就不用去啊,用这个回到地域了啊,那么语法上来说呢,这个promise啊,是一个构造函数。通过它呢,咱可以实例化对象。
01:02
而在这个构造函数内部呢,用来封装一个异步操作,我们可以呢,获取到它成功和失败的一个结果。啊好,那么接下来的话,我来给大家演示一下啊,切过来。来实例化啊,这个promise对象啊,Cost p等于一个new的promise。好,这是它的一个实例化的代码,而在实例化的时候呢,它这里呢,接收一个参数。这个参数呢,是一个函数类型的值。而且这个函数,这个函数啊,有两个行参。Resolve reject。当然了,这两个函数的名字你可以随便写啊,你这写A,你这写B都可以啊,不过在这呢,咱一般都是潜规则,哎,这块呢写resolve,这块呢写reject。然后呢,里边呢,封装一个异步的操作,在这呢,我首先先用定时器来做一个啊这样一个表示,写一个set time out。
02:06
好,然后呢,写一个function在里边,咱们定一个时间一秒钟啊。好,那么这是一个异步操作,在异步操作里边呢,咱们可以呢,就是得得到一些数据啊,当然无论是文件读取啊,还是这个数据库读取,还是这个请求这个接口读取,总之会获得一个数据,比如说啊led data等于一个数据库中的用户数据。好,在得到数据以后,我们可以干嘛呢?可以去调用这个resolve和reject这两个函数来改变promise对象它的一个状态。比如说我来调第一个这个resolve resolve,然后呢。当我调完函数之后,这个promise对象状态就会变成一个成功。
03:01
啊,对象主要有三个状态,一个是初始化,一个是成功,一个是失败。好,然后呢,当我们调resolve之后,这个对象的状态就会变成一个成功,成功又怎么样呢?哎,成功咱们接下来就可以调这个对象里边的一个方法叫Z方法,好调用这个promise对象的Z方法。方法,OK p.Z。然后这个Z方法呢,它接收两个参数。啊,两个参数,而且两个参数的话都是函数类型的值。啊,那么而且每一个函数都有一个行参,成功的这个行参一般把它叫做value,失败的行参咱们一般把它叫做reason。啊,叫做reason好了,那么当我们promise对象状态为成功的时候,也就是咱们这个异步啊代码里边掉了resolve,啊表示它成功,只要你掉了resolve好,那么Z方法就会执行它里边的第一个回调函数代码。
04:10
啊,我们可以使用log来打印一下value这个值好保存,然后咱们通过浏览器来访问一下。打开控制台刷新。好,大家看一下,两秒钟过后,这块数据空,数据库中的数据就来了。好,那么如果说呢,咱们在进行数据读取时发生了错误,Let error,比如说数据读取失败。那这个时候我们可以呢,调用reject函数。调完reject函数以后,这个promise对象状态呢,就会变成一个失败。失败以后,它就会调用Z方法的第二个回调函数。好,我们在这呢,使用console.l的方式来把这个结果呢做一个输出保存。
05:05
好,切过来,刷新页面看一下一二,数据读取失败就来了。那通过这样的方式呢,我们就把异步任务呢,封装在了一个promise的对象里边。而且通过resolve和reject这两个函数来改变它的一个状态。改变完状态之后呢,来去调用Z方法里边的这些回调,倘若你成功,则调里边第一个回调,倘若失败,则掉第二个这个回调函数。好,那么这个小节呢,关于promise一个介绍,以及它的一个基本使用,我们就先说这么多。
我来说两句