00:00
Hello,大家好,这个小节呢,我们来开始介绍一下ES8的新车型。其中第一个呢,是非常重要的一个特性,就是I think和wait。Think和wait呢?两种语法结合可以让异步代码看起来就跟同步代码一样。好,别着急啊,这两个东西呢,它其实也是为了进行异步编程的一种新的解决方案啊,咱们想回顾一下啊,之前讲的这个异步方案,异步编程的解决方案有哪些是吧?第一个生成器函数。第二个promise,而在ES8里边又引入了一个新的,就是I think和。好,那么这个小节呢,咱们先来看一下a think函数,那么a think呢,它用来就声明一种特殊的函数,就是a think函数。然后呢,这个函数的返回结果呢,它比较特殊,返回结果呢是一个promise对象。而且这个promise的结果呢,由a think函数的执行返回值来决定,我来给大家演示一下。
01:08
好,首先的话,我们先写一个script的标签,然后在里边呢,我先声明一个函数啊,随便写一个,我们写一个FN。然后这是一个普通函数,我们可以在这个函数前面呢补一个asy c think,此时这个函数就变成了一个think函数了。这是一个特殊的函数,特殊就在于它的返回结果是一个promise对象,即便你这里直接返回的是一个字符串。那么它的返回结果也是一个promise对象,好,Cost result等于一个FN括弧,看一下结果,Console log打印,Result保存。点开浏览器一起来看一看。你看这。它是一个promise对象,然后状态呢为成功,然后它的一个值为上硅谷。
02:01
那还有其他一些可能啊,现咱们现在是返回一个什么呀,返回一个字符串,其实除了字符串以外,你返回一个数字,返回一个unDeFined,返回一个none啊,返回一个数组等等等等,只要你返回的不是一个promise类型的对象。则这个结果就是一个成功的promise对象。这句话呢有点绕,我们需要呢,说慢一些,好,现在咱们是返回一个字符串,对不对,好,我们再来写一个,只要你返回的。这个结果啊,不是一个promise类型的对象。啊,只要你返回不是promise类型的对象,则这个函数的返回结果就是一个成功的promise,也就是说我这直接写一个return,咱们知道啊,直接写return的话,这个返回结果是一个unDeFined,那即便你直接直接直接写return,你可以看这个结果,它也是一个成功的promise。
03:03
啊,这个成功的值呢为unDeFined。好,这是一种情况,那么还有一种情况是什么呢?就是我们呢,抛出错误啊,比如说我在这手动抛一个through,一个new e new area,然后呢,出错了。好保存大家可以看一下,先别管下边这个报错啊,咱们先看上边这个地方,点开它你会发现呢,这个promise对方是一个什么呀,是一个失败的promise。而这个value呢,是那个失败的那个对象。啊,也就是说此时咱们的FN返回的结果呢,是一个失败的promise,好,返回的结果是一个失败的promise,而上边这个呢,你只要不是哈,你返回的这个return后边这个不是一个promise对象,则咱们这个函数返回的结果。就是成功的一个。
04:03
好了,这是第二种情况,还有一种情况呢,就是如果我返回的结果是一个promise对象怎么办?返回的结果如果是一个promise对象,这种情况居多啊,这种情况居多啊,上面这种情况的话,咱们一般不会直接不一般不会直接去返回一个普通的啊,其他类型好,来举个例子,Return一个new promise在里边传上我们的这两个参数好。然后里边我就直接啊,写一个谁啊,写一个成功。啊,Resolve成功我们都知道啊,调resolve之后,这个对象就会变成一个成功的promise,那么一旦它成功了,我里边成功了,好,那FN函数返回的结果也是成功的,保存大家看一下,点开它。看这成功,而且它成功的值就是函数返回的promise成功的值。
05:06
说简单一点就是你这个函数啊,你这个promise要是成功了,那我FN返回的也成功,而且我这个成功的值就是你这个成功的值。那如果说失败呢,失败也是这样一个道理,也是这样一个道理,保存你看我这失败了,我这失败的话,FN返回这个结果,它就是一个失败的,而且我失败的值就是它失败的值。它们两个是对应上的。好了,这是当前咱们对a think函数呢做了一个介绍,声明在函数前面,在函数前面加a think就可以了,而这个返回的结果是一个promise类型的对象,这个对象的状态呢,由函数内部的return语句来决定。如果说呢,他返回的结果是一个成功的啊promise,那好我这个地方结果就是一个成功的promise,那如果说我是一个失败的promise,那好我这块也是一个失败。
06:08
那么还有第二种情况就是我如果说函数内部抛了错误了错误的话,那我这个结果就是一个失败的promise,如果是返回的非promise类型数据,则这块结果就是一个成功的promise。好了,当然光光说这个可能可能大家呢,还会感觉挺陌生,说返回promise又怎么样,对吧?啊,我们可以呢,调用一下Z方法来result点。传两个回调啊,Value,咱们这也写线段函数啊,Reason。好看一下啊,Can log把这个value呢打印一下,下边这呢,咱们使用一个war。打印一下这个reason。注意观察,此时咱们是一个失败的一个返回结果,我保存,你看这儿。
07:01
啊,它是失败的,那的失败,失败的话调第二个回调函数里边代码,所以这块是一个黄色显示,那么如果说我要是成功呢,我这儿内部一成功,那么FN返回的结果也是一个成功的promise,它一成功的话,你看这儿就会走第一个回到里边代码,然后输出成功的这个值。好了,那么关于think函数一个介绍,我们就先说这么多。
我来说两句