看了别的同学提问,还是有一个问题不太懂

看了别的同学提问,还是有一个问题不太懂

调用函数​movePromise()盒子进行完移动后该函数返回一个promise对象,并且这个对象已经调用resolve(),此时该对象打点调用then()方法并执行第一个回调函数,该回调函数内又执行了函数movePromise(),盒子进行第二次移动,并返回一个promise对象,并且这个对象已经调用resolve(),我的问题是为什么要把这个promise对象,用return返回呢,http://img1.sycdn.imooc.com//climg/60e2cad209eab96502760020.jpg

不用return返回该对象,不是自动返回一个promise对象吗并且也是默认执行then的第一个回调函数,请老师帮忙解答一下。

正在回答

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

2回答

同学你好,再补充一点:对于then方法默认返回的promise对象,其会立即变为成功状态;

而movePromise方法中,只有当执行完move方法后才会变为成功状态,如下:

1
const movePromise = (el, point) => {<br>   return new Promise(reslove => {<br>    move(el, point, () => {<br>       resolve(); // move执行完成后,才会在回调函数中执行resolve()改变状态<br>    });<br>   })<br>}<br>

​因为下一次移动,需要等到上一次移动完毕才能继续移动,也就是要等到move方法执行完毕,才能执行resolve()改变状态(当状态改变时,then方法才会执行)。所以后面then方法的执行,需要由movePromise对象的状态决定,而不能由默认返回的promise对象的状态决定。因此,需要使用return手动返回movePromise。

祝学习愉快!

  • 激情的樱木花道 提问者 #1

    老师,then()方法中是默认return返回一个新对象,现在return的是movePromise返回的对象,默认的就不生效了

    2021-07-06 08:08:40
  • 同学你好,是的,使用return返回movePromise返回的对象,就不会再默认返回其他promise对象。

    祝学习愉快!

    2021-07-06 10:50:04
好帮手慕然然 2021-07-05 17:47:23

同学你好,then方法执行后都会默认返回一个新的Promise对象,且默认返回的永远都是成功状态的Promise对象,如图

http://img1.sycdn.imooc.com//climg/60e2d39f09187ce614770463.jpg

而此处代码中,后面then方法的执行需要由movePromise中的Promise对象来决定,而不是由then方法默认返回的新的Promise对象决定,所以需要手动使用return返回movePromise​。

祝学习愉快!

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

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

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

0 星
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

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