00:00
Hello,大家好,这个小节呢,我们来介绍一下promise对象的一个方法,Z方法,那么这个方法呢,咱们在之前两个案例里边已经介绍过了,这个用来指定回调,那么这个小节咱们来讲一下Z方法它的一个返回结果的一个状态。好了,首先的话,咱们先写一个标签,然后呢,创建一个promise对象。OK constant p等于一个new的promise,然后呢,然后reject,我们这里可以使用箭头函数啊,然后里边咱们还是一样的来用set time out做一个啊,异步任务的一个啊模拟咱们定一个一秒钟啊,然后在里边我来一个resolve啊,成功的数据,或者咱们换一个名词,比如说用户数据啊,更加真实一些,好,那么下边的话,我们可以通过p.Z方法来指定回调,对成功和失败结果呢,做一个处理,好,那在这儿的话调用。
01:01
啊Z方法好p.Z它指可以指定两个回调,那么回调这块也可以使用箭头函数,我们来一个value,然后呢来一个reason。好,那么当前的话,我们在这儿呢,先输出一下KO log,打印一下这个Y6下边这个位置呢,咱们使用。War来输出一下,这个失败的原因就是失败那个值保存,大家可以看一下,一秒钟以后用户数据有了啊,是谁输出呢?是19行,咱们也可以往这边挪一挪啊,可以看一下19行的输出没有问题,是他好,那么这是当前呢。Z方法,它指定回调的一个特点。就是说如果上边的promise对象要是成功了,则执行的是第一个回调函数里边的这个代码啊,如果说我要是失败了,比如说哎呀失败了或者出错了reject啊,来一个出错了保存,你再看一下,一秒钟来出错了黄色,好,这是我们说了一下呢,回调的一个执行特点,那么下边呢,我们来说一下关于这个Z方法的返回结果,哎,Console啊,所然cons的result等于它,它的一个返回结果呢,在这儿呢,也是一个promise对象console log,打印一下result保存,等一下啊等诶等一秒钟点开它,你看一下这个结果呢,它是一个resolved。
02:30
也就是说呢,这个Z方法返回结果也是一个promise,但是这个promise啊,它的状态由什么来决定呢?为什么这块是一个resolve的呢?它的返回结果是由回调函数的执行结果来决定的,我们把这个写一下啊,就是啊Z方法的返回结果。啊,方法的返回结果是是promise。对象啊,那么这个对象的状态啊,由啊,回调函数。
03:06
的执行结果来决定。啊,绝。顶,那么怎么一个决定法呢?如果说咱的回调函数啊,几种情况啊,如果啊这个回调函数。啊,函数中返回的这个结果呢,是是一个什么呀,是一个非promise类型的数据,是非类型的数据,你比如说啊,咱们以这块为例啊,我先把上面这个打开,咱们走这块好吧,走这块就是看着比较清楚一点,然后我在这儿呢,Return一个什么,Return一个123。那return应该第二三的话呢,我这块是一个非pro的一个返回结果,对不对,那么这个时候它的状态是一个成功。啊,状态为成功,而且你返回的这个结果就是这个promise成功的值。啊,返回值。
04:01
啊,为这个对象的成功值。好,这是一种情况,一起来看一看啊,保存切过来一秒钟,你看这用户数据有了啊,在这儿用户数据,然后再点,诶等一下啊,这个result你看这啊看这啊,这个输出是是22行输出,而咱们28这个看这28是它promise图像,然后点开你看一下它是一个成功的,而且你的返回值是它的一个成功的值。好,这是返回一个promise,那你可以拿个字符串,也可以做个测试。啊,保存过来,你再看一下,点开它,它也是一个成功的,你这是一个非promise类型的一个返回值,所以说它是一个成功的promise,而且你的返回值就是它的一个成功的值,那么如果说我要是不写呢,我不写return,不写return的话,咱们知道函数内部如果不写return,默认返回结果是一个onDeFi,那么onDeFi的话,它是一个promise类型的一个对象吗?它不是,那既然不是的话,那造结果也应该是一个成功,你来看一下。
05:11
点开它也是一个成功啊,而你这个unde find就是它成功的一个结果啊,这是咱们返回非promise的一个情况,我把这个呢写个注释啊,在这儿拿过来,那么第二种情况呢,是什么呢?就是如果说是一个promise。啊,是一个promise对象,那如果说是一个promise对象的话。那我内部的返回promise的状态就决定你方法返回那个对象的状态,什么意思呢?你比如说我这写一个return,一个new promise resolve,然后reject。我这为了直接啊,就直接调一个resolve,来一个成功来一个OK。就是里边这个封装任务啊,咱们说了大多数情况都是一个异步的,但是你也可以写这个同步的啊,写同步任务没有问题啊,好了,那么这个时候你可以看一下我这个回调函数里边返回的是一个promise,那么我这个promise的一个状态就决定了Z方法返回promise的一个对象状态,我这成功,他这也就成功,你看一下我这是成功了啊,保存过来。
06:21
然后点开它,你看一下成功,而且我成功的值就是另方法返回promise对象成功的值,你看我这是OK,它这也是OK,这是成功的一个情况,那如果说我要是失败呢,Reject来一个error,好,我这如果失败,那另方法返回的promise也是一个失败,我失败值就是它失败值保存可以看一下,点开它状态为一个失败,然后这块是一个error啊,失败值是一个error,就是Z方法呢,它的一个特点。当然还有一种情况是什么呢?就是刨除错误。啊,抛出错误,比如说我这写一个through啊,New era是吧,来一个new era。
07:06
啊,出错了,哎,然后这个时候你看一下保存过来。看这点开它,如果我抛出错误的话,这个状态也是一个失败的promise这个状态啊,然后呢,这个错误的值是什么呢?错误值就是你抛出来那个值。啊,看的清楚一些啊,我再给你抛一个其他其他类型,比如说咱们就来一个出错了啊,我抛一个字符串,你就看的比较清楚了。好点开它,你看这失败值就是它。那么既然呢,这个Z方法呢,有这样的特性。啊,就是它可以返回一个promise对象,所以说呢,Z方法是可以呢,链式调用的。啊,链式作用什么意思呢?来大家看一下啊。啊,来一个链式调用,也就是说我在这儿呢,可以呢p.Z。啊,然后呢,指定回调,然后呢,后边呢,再来一个失败回调完成以后呢,我后边再可以跟一个Z。
08:08
啊,我在后边可以再跟一个方法,再来写这个成功和失败的回调。啊,这是没有问题的啊,来在这儿,哎,在这儿啊在这儿当然还要说一个事情,就是Z方法呢,它在指定回调的时候呢,是可以只指定一个的,就是我光写这一个失败,我这个不写可不可以啊,也可以像这样子,那也没有问题啊,也没有问题啊,就这样子,那么这样子的话呢,我可以在Z方法这个回调函数里边接着去嵌套异步任务。就是我是异步任务呢,跟着一个啊,我这一个一步任上面这一个异步任务对不对,我这儿可以再跟着一个异步任务,一个跟着一个,一个跟着一个,一点一点向前推进。啊,它形成这样一个链式调用,链式调用一形成就可以杜绝一个问题,什么问题呢,就是回调率。
09:01
啊,就是回调地狱,就是我可以通过链式调用来改变啊,咱们之前回调地狱那样一个现象。好了,这是当前呢,我们给大家介绍一下呢,这个Z方法。
我来说两句