不太明白then里面写的东西

不太明白then里面写的东西

cook()

.then(eat)

.then(wash)

.then(data=>console.log(data));

我看好多同学都是在then里面写一个function(){},然后括号里面写一个形参,再在花括号里调用相应的方法。

可是我这种直接写个方法名eat、wash怎么也能调用呢?也没有进行传参的操作呀,怎么就能正常打印所有内容呢?而且我直接写eat()、was()的话,就只会调用这两个方法里的第一个打印语句,然后后面跟两个undefined,一共只会出来5句话,为什么?

正在回答

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

2回答

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

1、语法规定,如下图所示的两种写法都是可以实现效果的,同学直接传入函数名的写法,可以理解为是简写格式。

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

2、直接写eat()和wash()表示调用该方法时没有传递参数,函数内部无法访问到data,所以打印出来的是undefined

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

3、老师这边测试只是会打印出来undefined,但是不止五句内容,同学可以再测试下

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

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

  • Aurora_Meteor 提问者 #1
    为什么‘鸡蛋炒饭’hi打印出来呢?它不也是在定时器里的resolve中吗?其他两个就不会打印啊
    2020-05-08 16:53:07
好帮手慕慕子 2020-05-08 19:10:11

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

1、resolve中的值是传递到then方法中的参数,只有在then中通过console.log输出传入的参数,才可以在控制台查看到信息

2、因为同学的写法是eat()和wash(),eat和wash方法内部有返回的值,但在then方法中并设置返回值,也没有使用console.log打印对应的值,所以其他的两个不会在控制台中显示。

那为什么会“鸡蛋炒饭”会打印出来呢,是因为cook方法内部返回了p,调用时,就会将cook方法中的resolve方法中的值传递到下一个then方法中,由于前两个then方法中没有接收,也没有设置返回值,所以最后一个then方法中接收的是cook返回的值,输出出来了。

老师这里给同学举例几个情况,同学对比了解下,如下:

不使用最后一个then输出内容

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

“鸡蛋炒饭”就不会打印出来

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

在第一个then接收cook中的resolve值,然后将eat返回出去,那么最后一个then中输出的就是eat方法中resolve中的值

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

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

同学可以测试理解下,祝学习愉快~

问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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