00:00
那回调函数我们完成之后呢,再给大家去解释一下所谓的回调函数它到底是怎么回事,好吧,那这个,呃,所谓的回调函数的基本原则呢,实际上我就拿一个这个小故事给大家举例吧,就类似于啊,呃,我买了一张新桌子,那我呢,要给这个桌子刷漆啊,但是有一个问题在于我不会刷漆对吧?这怎么怎么刷呢?我得去找一些资料对吧?那找资料发现得有油漆,诶,那我又没有,那怎么办呢?我得去买,但问题是我得先去学怎么刷,那还得同时得去买油漆对不对?好,那这两件事都需要我去做啊,那就简单了啊,我就只做一件事情干啥呢?我就去专心研究怎么刷,哎,然后呢,找是吧这个小明啊,说来给你钱啊,帮我去买。
01:01
注意,这就是一步,啥意思?就是本来我应该先看完说明手册,然后再拿着钱去买,买,后来再按照我学的手册再去刷,对吧?没关系,现在我在学习怎么刷的这个过程中,诶,让人帮忙去买这个油漆啊,那么因此呢,就是我让别人帮我去做这件事情,那别人呢,其实就相当于是一个额外的县城或者是任务了,那他买回来之后要干嘛呢?哎,注意啊,就给我对吧,那我就开始去调,把油漆要给我们,那油漆怎么给呢?在代码中啊,我们使用的就是默认啊,就是回调函数的方式,你把油漆放到那个函数里面,我去调这个函数,那函数呢,就能够把油漆回来了,但是油漆怎么买,是别人帮我去做的,好吧,OK,那么这就是我们刚刚所谓的这个回调函数,但是啊,回调函数去做异步的这种方式呢。
02:01
是没有问题的,但有一个最大的问题在于什么呢?在于你这个回调函数一旦多了就出问题了,什么意思呢?来就比如啊,拿我刚刚的这个小例子来说,我说什么呢?我说啊,一定是你点完这个按钮之后,你才能去怎么怎么的,就说好的时候是必须要你先把前面的某一件事情做完,但是呢,这件事情又是异步的,然后我才能再去做什么,也就是说你必须他虽然是异步的,但是我又必须等啊,那么这种情况下就会出现什么情呃,这个这个情况呢,就在我们的代码的调用当中啊,你比如这里我得先去发送这个请求,请求来了之后我判断没有错,就是他执行成功了,我才能去再发另外一个请求,然后我再去判断你这个请求也没有问题的时候,我。
03:01
才能再去发另外一个请求,然后他也没有问题,我才能再去发另外的最后一个请求啊,那这就是我们经常所说的叫什么叫回掉地狱啊,也有人叫什么呢,叫回掉金字塔,这就是一个最大的问题啊,这个最大问题,那这个最大的问题就在于什么呢?它不是没有办法去解决一部这个数据的问题,也不是没有办法解决通信的问题,因为回电函数确实解决了通信的问题,但是它的最不好的点就在于说我们的代码写起来,它就是一层一层的这种嵌套问题,那这个就非常头疼,而且呢,我们的代码的测试啊,然后我们代码的一些啊,这个这个找bug的一些时候,就是它的逻辑等等,就是一层一层签的越圈越嵌越深啊,非常的看起来啊,非常非常的。
04:01
不友好啊呃,录完视频放在B站上吗?晚上会没有时间啊,对,录完视频会放到B站啊,但是呢,今天肯定讲不到了,可能讲不完了啊,那个一会儿呢,要去开一个会,好没关系,我们把这个给他讲完啊,把这个给讲完就是,那这现在呢,就出现了这个什么回调地狱这个问题了,对吧?那回到地狱怎么解决呢?注意啊,此时哎,我们就得有请谁啊promise出山了,那promise是干嘛的呢?来,我们先把它的基本逻辑讲清楚啊,Promise呢,其实他本来就是在回调函数的基础上,同时就是能够完成异步执行之后,给我们返回数据的这个功能是保留的,那同时呢,又能够在我们的编码时,不让我们的代码出现这种什么异步调用的这个回调。
05:01
地域的这个问题,它其实就是解决的这个问题,那promise到底是干啥的呢?来请注意啊,Promise呢,首先啊,你要明白,它有一个就是他直接翻译过来呢,叫做承诺啊,许诺,希望怎么怎么地啊,这就类似于我去买一个油漆,我交给了另外一个人去买,对吧,那那个人一定要给我一个承诺或者许诺,许诺什么呢?许诺我拿这个钱我不会跑了,对吧,说我拿这个钱我一定能给你买回来,或者说我一定去买,不管能不能买得到,或者是能不能买成功,我一定会回来告诉你这个结果,买成功了我也告诉你,买失败了我也告诉你啊,或者是商品没有货了,怎么样,我都会回来告诉你一个结果了,这个结果有可能成功,有可能失败,那么意思啊,就是promise一旦去执行,那么就会意味着什么?意味着好,你给我这个许诺了是吧?行,那我等着你,那么此时呢,我们就会陷入一个叫做pending,就是等待的状态。
06:01
啊,那么等待状态一旦执行结束之后,就异步处理完了,那比方说那个人回来了,对吧,他一定注意啊,我等待结束之后,他一定是要给我一个结果的,这个结果是成功也好,失败也好,是一定有一个结果,那么因此呢,就对应出来了,成功,那就是啊,如果失败呢,就是reject啊,就是这种成功和失败的两种不同的状态,或者叫结果,那么对于我来说,那如果成功了,还是拿游戏来说啊,如果成功了,那我就开盖开始去啊刷桌子就可以了,那如果说失败了,那我是不是也要对应另外一个动作,我说诶,那能换一个地方或者怎么样,我另外还有处理的就是我现在没有办法刷了,但是我可以做其他的动作,所以呢,就是成功之后,我们对应要执行的操作,那我们把它叫什么呢?叫unfulfilled啊,那如果失败了,那一样要对应另外一个动作或者是操作,那就是unre reject。
07:01
啊,OK,那这就是所谓的promise一个基本逻辑啊,基本逻辑OK,那么接下来呢,我们就来看看,那对于代码基基本逻辑我们理解之后,那对于代码我怎么去写呢?那我能不能把整个我们刚刚啊所封装的这个promise这个这个这个回调函数的这个方式,因为他一旦使用你就发现陷入了回调地域了,对吧?那我能不能在它的基础上改成promise的方式,从而解决回掉地域的问题呢?那当然是可以的。好,那预知后事如何?且听下回分解,我得去开会了。
我来说两句