这里不能使用链式调用的原理吗

这里不能使用链式调用的原理吗

老师好,这里为什么不能直接使用下个.then而是要return f()来又返回一个实例

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

3回答
好帮手慕久久 2020-07-14 19:34:16

同学你好,是说如下这样写吧:

http://img1.sycdn.imooc.com//climg/5f0d97be094cd47005260233.jpg

这样写的话,“1”打印完,会立即打印“11”,即起不到异步的效果。如果想起到异步效果,即“11”在“1”执行完,1s后再执行,就需要在第一个“.then”内,返回一个promise对象,同学可以理解成固定的写法。

为了模拟二次异步请求,所以第一个“.then”才返回“f()”,也就是,只为了返回一个promise对象,才将“f()”返回:

http://img1.sycdn.imooc.com//climg/5f0d97d909e7943c05540415.jpg

而“return f()”这个过程,不止会把promise对象返回,还会执行f内的代码。

祝学习愉快!

好帮手慕久久 2020-07-14 18:19:37

同学你好,如果像如下这样用也可以,只是第二次“.then”内的内容,就没有异步的效果了,如下:

http://img1.sycdn.imooc.com//climg/5f0d867709b4059f05540378.jpg

页面效果就是“1”打印完,会立马执行“11”(没有延时1s)。

通常情况下,我们都是用promise解决异步回调嵌套这个问题,即第一个请求后,需要在请求结束的回调函数中,再次发送请求,如下:

http://img1.sycdn.imooc.com//climg/5f0d86950992485804820253.jpg

所以在第一个“.then”中,又返回了一个“f()”来模拟异步请求。

祝学习愉快!

  • 提问者 慕雪9296518 #1
    好的,这边我还发现一个问题,为什么我直接f()不可以呢?要用return f()才行,毕竟f()也是调用自己啊,还是说有可能在promise在之前有别的一次性代码,为了防止f()把这些一次性的代码也重复执行所以只return f()相当于return promise?可是return f()不代表只return 其中的promise对象吧
    2020-07-14 18:54:35
好帮手慕久久 2020-07-14 17:43:38

同学你好,问题解答如下:

由于“.then”是promise对象的方法,所以第一次调用“.then”之后,如果还想要“.then”,那就需要在第一次“.then”中,再次返回一个promise对象,如下:

http://img1.sycdn.imooc.com//climg/5f0d7d0e09c864e407890315.jpg

上面的例子,同学可以这样理解:第一次调用f()可以看成是第一次请求数据,如果需要在该次数据请求之后,再请求第二次数据(前后请求的数据不一样),则需要将第二次请求写在第一个“.then”中,即"return f();"就是模拟的第二次异步请求数据。

同学仔细看一下老师的回复,对照图片,理解一下。

如果我的回答帮到了你,欢迎采纳,祝学习愉快!

  • 提问者 慕雪9296518 #1
    但是f()第一次就返回了一个promise对象不是吗?如果继续调用其中的.then为什么不行就是说继续沿用第一个promise
    2020-07-14 17:46:08
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师