00:00
哈喽,大家好,这个首先我们来做一个promise的一个实践。啊给大家演示一下呢,Promise解决回调地域啊这样的一个演示啊,首先的话,咱们的需求是这样子的啊,读取三个文件内容挨个读取啊,先读取这个为学,再读取插师,再读取这个观书有感。按照顺序去读,读完之后咱把三个内容呢,合在一起做一个输出,注意要合在一起好了,那么首先的话呢,我们先按照原始的方式去做,咱们这儿还是要用到noe基S的一个啊环境啊,还有这个语法,不过都比较简单啊。好了,我们首先第一步的话,先来引入这个FS模块啊,FS模块cost FS等于一个require FS,先按照我们之前的一个做法去去实现FS read file路径这块点杠resources,先来第一个为学点MD。
01:00
然后a data,好,那么这块的话咱们先不做判断,因为路径是绝对正确的啊,这个data的话咱们是肯定可以有的,那咱们开始读取第二个,我把这个复制一份为学这块换一下名字,换成插秧式。然后呢,再来第三个拿过来是观书有感,观书有感,此时的话,咱们三个呢,已经签到成功了啊,大家同学可能会说,那我们实际当中会这么去做嘛啊,我要先说一下啊,这个实际当中就是咱们在实际的项目当中,咱们可能不会这样做,但是会有这样的场景啊,你比如读数据库啊,我们要读取用户,读取完用户之后,要根据用户再去读取用户的其他信息,比如说详细信息,再比如说用户的订单等等等等,就是必须先有用户才能有用户的后续的一些行为啊,或者是后续的一些数据,就他们之间是有递进关系的,而并不是说是一个并行的这样一个呃关系,所以咱们要按照这种层级方式去做好了,那么这块咱们做完之后呢,你可以看一下啊,有问题,Data塔data塔data塔三个挨一起的明显不行,对不对,咱们换个名字得塔一塔二。
02:11
点塔三,这是回到地域的一个问题,容易重名,而且重名的话不容易被发现,调试问题很不方便啊。好了,那么下边的话,咱们开始对他们三个做一个连接啊,Comes,哎,咱们写一个let啊,Result等于一个data,一加上data,二加上一个data,三最后做一个输出来一个result,保存右键run code。大家看一下啊,来了伪学啊是吧,这些都有,但咱们这儿没有加换行符是吧,其实呢,可以在这加一个换行符。哎这哎这然后呢,加中间这一块呢,补一个什么呀,补一个杠杠R-N搞定哟呵,咱们连接好像出了一些问题是吧,后边的连接出了一些问题,我把它拿放中间。啊,保存,当然你也可以使用那个谁啊啊,咱们的模板字符串那个就更稳妥了啊运行看结果为学插阳师还有关输有感没有问题好了,这是呢,咱们使用回调地域的方式去做啊,你看代码不断向前缩进,如果你还有异步任务,它还会往前缩啊下边呢,咱们用一下promise来实现一下好了,使用。
03:20
这个promise实现首先的话呢,咱们现在读取第一个文件,哎,Constant p等于一个new promise走resolve reject。在里边呢,还是用到谁啊,用到这个FS模块啊FS.read file路径点杠resource,然后呢,为学点MD,后来后边来一个error。啊,然后data咱们没有失败是吧,只有成功啊,咱们这路径是绝对正确的啊,所以咱们这儿呢,来一个resolve data,这个时候大家注意啊,我们的P呢,这个对象是一个成功的对象,而且它成功的值是谁啊,是为学这一个文件内容,那既然是这样的话呢,咱们直接开始来一个什么呀,Z方法指定一个回调。
04:10
啊,指定一个回调,那么此时value的值就是咱第一个文件那个结果啊,我们可以看一下啊,Conso log打印一下这个value不这类型是一个八分啊看一下走啊,你看这。哎,我把上面这个先注掉啊,它影响我们的结果了,嗯,右键运行。好啊,提一提看这是个八分啊,不过没关系,咱们可以通过这个to string的方式呢,对类型做一个转换啊,变成一个字符串,方便咱们去看里边内容,看一下有了没有问题好了,那么既然是这样的话呢,Value是第一个啊,文件里边内容,那下边咱们在这儿干嘛读取第二个文件内容,来,我把上面这个呢,直接复制一份,在这呢,读取第二个文件啊,第二个文件是插样式保存,保存之后呢,你注意观察这块出了一些问题。
05:00
什么问题呢?现在我们读完以后啊,Data这块是可以拿到这个插秧师文件内容的。但是呢,现在的话咱没法呢去读第三个,你要是想读第三个,你就又去嵌套了F,你就是直接读啊,你要直接想读的话,你就FS,那你就成了回调地域了,所以说咱们不能这么干。啊,咱不能这么干,咱怎么办呢?诶,咱可以在这儿呢,Z方法再回到里边,再返回一个promise,你看一下啊,我这来一个new promise resolve reject。然后下边拿过来放到这儿格式化一下,到这儿以后呢,咱Y6是第一个文件内容,Data是第二个文件内容,那这个时候咱就可以把这两个内容做一个合并,继续向下传递。啊,继续向下传递怎么办呢?你看一下啊,OK,这样子resolve括弧数组value,然后来一个data,咱们知道是可以改变这个promise它的一个对象状态,对不对,变成一个成功,那么这块如果成功,咱知道这块如果成功,Z方法来返回的promise也是成功的。
06:15
而且我这块成功的值就是Z方法返回promise成功的值,那所以说我下边再来套个Z。那value此时变成什么呢?变成了第一个文件和第二个文件,它内容的一个形成的数组。啊,形成一个数组,那么这时候Y6是两个了,那咱们要想获取第三个啊,那怎么办呢?诶也是一样子啊,也是一样子啊,看一下我还是按照套路,其实在这儿咱们已经可以把三个拼在一起了,但是我再去做一遍啊,把它复制一份拿过来读谁啊读这个第三个观书有感。啊,点MD好了,你看一下value呢,是那个数组。
07:01
对不对,然后data呢,是第三个文件,就是第一个第二个文件在这呢,啊,然后第三个文件内容在这呢,那下一步怎么办呢?咱做一个压入呗,对不对,压入好,那么value.push来个data,那么此时value是不是就是三个文件的一个结果了。是一个数组对不对,那好吧,那直接来个把value往里边一放,那么我这呢,咱这个promise是不是又成功了,我这一成功,那好Z方法它的返回结果又成功了,好他要是一成功后边再来个Z方法走。那你说Y6它的值是什么呢?它的值就是三个文件的内容啊,形成了一个数组,看一下啊右键,然后运行往下走看数组,第一个8UFF法,第二个8UFF法,第三个八法就来了,那现在的话咱们只需要把它们三个拼在一起就行了,怎么办呢?那就直接conso log来一个value.join不是数组吗?做一个拼接,用杠R-N1拼接,然后保存,来个运行,要错啊,又来运行走起。
08:11
看,这结果就来了。好,这样一来的话呢,咱们就通过Z方法将多个异步任务串联起来,你看这这是一个异步。这是一个异步任务,这又是一个异步任务,我们可以把异步任务呢串联起来,那你可能会说,哎哟,感觉这样写还没有咱们回到地域这样写方便呢,对,这样看起来短期看你确实发现呢它啊没有这个方便,但是你要是长期来看的话,咱们的代码不会产生回掉地域的现象,最多到这儿啊,最多到这儿已经到头了,不会再往前缩进了,但是你看你这个,你要是再有异步任务,你还得往前缩进。你会不断下线,但是我们这个却不会好了,这个呢,咱们通过这个案例呢,给大家演示一下任意方法的一个链式调用啊,封装多个异步的任务啊,这样的话方便我们去去操作啊,方便咱们去操作啊好了那。
09:14
这个内容我们就先到这儿。
我来说两句