00:01
啊。MG。嗯,下一个我们看一下。正面两个。啊,关键字一个叫a think,一个叫什么呢。这是最新的语法才出来的,两个关键字,甚至包括ES6都不是ES6的正式规范里面我们来看一下,当然现在浏览器都支持了啊,最新版的浏览器是支持的。好,那这两个关键字怎么用呢?是吧,它用来干嘛呢?前面我们还用了一下是吧。啊。那这。MDN上面呢,是有专门的两个文档去说明这think wait的使用,我们可以把它打开一下,一个是a think,一个是which。啊,Think经常我们称它为函数。
01:05
那翻译过来叫什么?发译成中文怎么说,是不是异函数?啊,实际上在它为什么叫A函数aent function或叫函数了。啊,是因为我的think右边跟的是什么呢。跟的是函数定义。是不是也说我的A放到谁的左边呢?函数定义的左侧。是吧,好作用呢,我等会再说啊,你先要明确在哪用它啊,下面一个叫。而的右边它跟一个什么。Pricing什么意思?Inspection。不知道这个单词意思表达式。你比如说的右边我写一个FN括号行吗?我写一个FN括号,就是左边写一个。
02:10
可不可以了,可以,因为这FN括号它是个什么呢?表达式,那个表达式是不是应该有一个结果,而且这个结果一般都是一个promise吧,我们说的右边是不要放一个promise。啊,当然一定要放一个花面是不一定啊,不一定,等会我们来看啊。那也就说啊,这一个,包括这整个他都是一个表达式,刚才我们的think的右边是不是发音函数啊。那也就是说最终的结果是一个什么样的意思呢?就是有AS函数以及wait什么表达式。
03:01
好,那我们先来去看think函数啊。到后面呢,可以去看一下啊,文档里面的一些说明,这里面我就不带一个过了来。什么意思?我假设定义函数FN1吧,因为后面可能还会写,我这里面呢,有一个一可以吧。那我在下面调用的时候FN啊,一括号得到的result是多少,这个不用问是吧,是个一是不是啊是个一。这个不用我去测试吧,好,重点是什么呢?重点的东西来了,如果我在这边写一个a think。那我还是可以调这个函数的吧,那我得到了一个什么呢?我得到的还是一吗?
04:11
那不是一是什么。不知道是吧,看看究竟是不是啊,一探究竟好。不知道很正常啊,不知道很正常,现在我们是要去看,是要去知道到底是什么啊。好。是什么呀?是构造函数吗?那为什么它显示这个呢?对,它显示他的类型名。这我们是不是讲过把它打开。是不是这样我就能知道当前是个promise对象,它里面是包含了两个隐藏的属性。
05:03
从此,从这两个属性我能知道什么样的情况,他是不是已经成功了,而且成功的结果已经为一。那现在你告诉我a sin函数的返回值是多少?AS函数的返回值是多少?对象。你不已经得到一个方面,你就看result是什么东西呗。不就是它的返回值吗?意思吧,是这个意思啊,Think函数的返回值啊,是一个promise对象,那这个promise对象一旦说到promise,你马上就想。
06:04
结果应该是多少,是不是也就说到底成功失败啊?数据是多少对不对,此时的这个result promise它是不是成功了呀,成功的结果只有几一。那一定是成功。那你给我产生一个让造的是一个。告诉我。怎么做啊,比如说十试一下是吧,啊,比如说我十啦,我也不是,哎十写错了是吧,能看到好。那我们这个result是多少呢?还是promise对象是不是,关键是成功了,失败了,失败失败的是不是应该有个原因呢?原因数据是多少?
07:05
咱是不是已经有经验了,是不是好。只是我这里面是不是没有做处理,我现在打印已经没有意思了,对不对,打印没应该怎么做,应该去点。是不是通过这个成功的回调,是不是接收成功的结果啊,这是一个result是吧,这是一个value啊,或者说这个写成嗯,On reserved是不是也可以。那下面还有一个什么失败的回调,在失败的回调里面呢,也可以写个打印啊,先写一个标记oned。对吧,那现在我们去刷新大家看到。
08:00
是不是能取到最终的结果了,知道他失败了,而且失败的原因只是啊,是不是,那我除了这种还有别的吗?那我是不是有可能返回一个失败的promise是吧,那我写个promise点什么,是不是这个一个三位。可以吧,那此时就是什么成功的,但是如果我写个了失败了。是吧?是吧,那好了,那我这个地方如果是,那就应该什么是不是成功了。是吧,这个其实跟我们前面的那个逻辑是什么。一样的。说白了啊,大家知道啊,我们写的代码和真正最后解析的代码它是不太一样的啊,这个它内部会解析生成,也就是说我的函数看似。
09:09
比如说我函数看是返回一个一是不是,但实际上最终是不是外面再包了一个promise对象,Return的是这个promise对象吧。所以我后面得到的就是那个promise对不对。就返回了,是这些东西吗?是这个一是这个时候二吗。不是,一旦你加上think,那我的函数的返回值就不是这些,而是要包一个什么?是不是return一个promise,而那个promise的结果是不是由我这个函数执行结果来决定。还是这样,就是a think函数返回的promise的结果由谁来决定?由函数执行的结果决定对不对。
10:06
而这个决定的策略跟我们以前前面那个点认的是不是差不多,是一样的处理,对不对,一样的处理。当然我这里面是不是都返回的是一个立即成功或者立即失败的一个promise,那我能不能返回一个延迟成功或者延迟失败的呢?可以。啊,也是可以的,当然他没这个语法,那我们写一写,就是这个时候如果要延迟的话,那我就得自己的又一个什么promise,是写一个这个,接着来一个什么肉,来一个现在写这种代码应该轻轻松松就能写啊。啊,再来一个什么set time out啊,比如说来一个1000是不,我在一一秒之后才掉行不行,比如说我传一个四。
11:03
可以吧,那传个四的话,大家就在想啊,你说我的这个肯定会叫他吧。他能会腻掉吗?他要过什么?一秒之后是不是不止?这个能懂吧,能懂啊,那也就是说我去刷新一下。是不是过一会才有结果?这跟长那个一模一样。所以说我们只要把内部的语法搞清楚啊,这些包装的语法其实没多难。啊,注意好好了。啊,现可以看到,下面我们来看另外一个东西。叫什么呢?右边是个什么。表达式表达式好了,来看好了。
12:06
我再来写个函数啊,F2。来这个函数呢,他要他先我就返回个二吧,我再定义一个函数,再定义函数好了,那这样啊,我我看看我们前面说过一个事情,Wait的右边是不是写个表达式,那个表达式应该是一个什么样的值呢。比较常见的应该是个什么?是不是promise啊,那我先给它改一改啊,让他产生反馈,Promise怎么搞?那就这么写呗。是吧,这不就回了吗?能听懂吧,那也就是说我看好了,我们以前用的最多是这样的调用它是吧,调用它的话,按正常情况,我是不是应该得到一个什么。
13:08
米吗?对不对。但是我要是就这么写着,我下一步要想取到那个啊,那个结果是不是要点认才能到,我们说我们不想给任是不是。我想得到的是不是那他最后给我的那个Y值,那怎么做呀。在这个返回promise对象的这个表达式的左边写一个什么。Wait。对吧。这个啊,从字面上理解就等等,等到什么时候呢?等到这个promise是不是有了结果之后,这个promise是不是很有可能,是不是过了一段时间才给我结果啊,比如说吧,我就把这个拿过来。
14:02
是不是两秒之后啊,一秒之后才给你结果吧,啊换个什么,是不是那一秒之后才产生我这个五的结果。那你说我什么时候才能得到这个理?一秒之后吗?是不是这个道理,但是它要求一旦你用上了a wait,那你所在这个函数。必须声明什么呢?啊,你要不声明think他是不是报错了?能听懂吧,那我是不是FN3,是不是可以去括号六。是吧,那我在这里面是不是可以输出这个可以吧,就可以了,对不对。这能不能看到?可不可以好来?这个是这个用法,是我们前面的一个基本用法,大家看到是不是一秒之后才出来,是不是点五。
15:01
对吧,这一个是在说我们在写这个代码的时候,我wait的右边放的是一个promise对象是不是。那一定是放在下。对,甚至我可以这么写啊,注意啊,这一个a wait。啊,右侧表达式为pro,这样这是最常用的,基本上都会这么做。那我维最后得到结果谁呢?表达整个表达式的值就是谁呢?啊维最后的结果得到的结果谁。得到的结果,得到的结果就是这个promise是不是成功的值啊,就是成功的什么。
16:01
是不是道理?是吧?那现在好,那如果哎,我的微对不对,不写一个不是写的一个对象,我咔嚓就写个三。啊,600。可不可以,当然你也可以执行一个函数,或者做一个什么事情,产生一个非promise的一个结果,听懂了吧,比如说我执行FN3啊,FN4了,对不?我去执行FN4,当然我得提前把FN4给他什么是不是定义出来。是吧,那定义出来我这个函数是不是应该有个返回值是吧,那我就返回一个六可以吧?啊,你也可以做很多别的事啊,这个别的事我都不做了。那现在也就是说wait的右边右侧表达是还是promise吗?不是,如果它不是promise,那我得到的是什么呢?
17:09
得到的是就是这个表达式本身的结果,能懂吧,就是这个值本身。表达式的值能听到吧。就他本身嘛,别写那么多了,好来看一看是不是也就现在应该输出Y几为六。而且是密集产生结果是不是?这个能懂吧,当然这些在我们呢,在那个对应的文档里面,其实它都有说明,大家可以自己去看,如果等待的不是promise对象。
18:02
则返回值什么本身这不说的很清楚了吗?那如果是promise。返回对象处理的什么结果?但关键是结果一定成功吗?不一定,他还有可能什么失败。那也就是说,我万一这里面不是叫肉,而是叫reject呢?是不是,那我得到Y力了吗?得到外景了吗?我得到外啦,不可能得到外六嘛,因为我得到外扭只有成,只能得到成功的歪扭。是不是,那如果他失败了,他现在确实失败了吧,那咋办啊。也就是说,在think里面想得到promise失败的结果,我得用什么语法呀,Check。
19:05
对不对,只能用太监。只能得到成功的结果,我想得到失败的结果,那就是什么,看一下。对吧,好那个踹开一,这就是这个是不是就是明我失败了对吧?啊得到失败的结果,得到失败的结果,你说这个结果是多少啊,是对象吗。我就问你了,这个失败的结果是多少呢?你就要想嘛,这个F啊,得到的是不是一个失败的promise,你告诉我,我现在用开得到的是啥呀,得到了是失败的结果,值呗,那他的结果是多少呢?说清楚啊,你说一个值啊等对啊,你60不出来,那白瞎的吗?
20:16
很简单,你说个六那就没事了。也就这个L不一定是真实L对象是吧,就是我失败的原因值是不是是吧?啊,只是我们在写开的时候,一般都命名成error对不对,一般它命名成error。来看是不是刷新。啊,这个Y这里面有个位置写错了,应该是啊,我点啊这个出来了。因为这个。这个被我是吗注释掉了,看到了吧。鞋子。他们俩一套那好多了是吧。
21:09
是等你啊。嗯。这里面有两个点,大家可能以前没有取下第一个点,呃,S函数的返回值是多少?对象。对吧,那还有一个事情,Wait右边的表达式,一般我们是不是写一个promise,一般的这个promise对边,但可不可以,不是可以。嗯。对不好,还有一个小事情啊,你看啊,我们现在这边是不是有一个函数F是不是,那我看好了。我能不能这么做,怎么做呢?嗯。
22:04
我叫F1。我能不能在这边加个位,任何表达式左边都可以加个位,只是说这个表达式的结果是不是个promise的问题,对不对,大家现在是吗?他如果不,他返回的结果如果不是promise,那我就得到这个结果本身是不是,那如果它返回的是。Promise,那我是不是得到了promise它内部的结果,现在我问大家,我执行。得到的是个什么?啊,我掉F1得了什么米什么,为什么?因为他这个地方加了个S,即使我这里面不是反回promise,现在是直接反回,好像都不能说明问题,我现在写个一。
23:05
你说我现在FN1括号得到的是一吗?不是,刚才我们不是测试过吗。因为F1是不是左侧的定义有一个think,既然调用的是一个异函数,那F1是不是就是个异函数了?异步函数执行的结果是不是promise?但是我一到wait以后,是不是还是得到这个E了。对不对?我得到的一并不是因为F1返回的是一吧,而是因为它返回了promise成功了,而且成功的结果已经一,是不是道理?明白了,就是这么回事。那这个地方最终大家要注意啊,咱真正写可能用的更多的就是用上wait,就用上think,一般说实话很少说你没有没有promise,没有wait,你还用a think很少,但是你要知道语法是允许的,对不对。
24:09
他面试的时候吧,他问的还就是一些你可能不太常用的。嗯,这要注意啊,我们前面说过,Weight是不是必须写在函数里面。对不对。对吧?A think必须写在a wait必写在think函数里面,但是a think函数里面一定有什么不一定是不是。有没有区别开来啊?好,如果a promise失败了。哎,有没有可能右边不是一个不是一个promise,但最后。啊,最后我得到的结果,也就是说,比如说。
25:00
我不是一,我不是一个,我不是一个promise,我F里面呢,没有没有返回,我有没有可能得到一个失败的结果,也有可能,因为我这还是有可能会异常能听懂吧,但一般一般是不会对吧,一般不会,我们说一般如果我得到一个一般的值。这个值是基本类,其对象有关系吗?没关系,你只要产生一个非promise的结果,那我是不是直接将这个这个结果返回,那也就是什么意思呢?啊这个地方啊,还有一个事情,如果我wait的是一个promise的失败promise。我怎么得到失败给我?必须用什么,也就think是跟谁配合使用,当然那如果我的维的右边的promise不会失败的话,那还需要需要开心吗?不需要。
26:01
啊,当我是意识到他是有可能失败的对不对,我才能穿开始。能理解吧?啊,这个基本上就是a think的所有语法了。他需要去把这些呢给他搞清楚行。
我来说两句