还想请问下getRecommend()的问题

还想请问下getRecommend()的问题

getRecommend() {
        if (this.curPage > this.totalPage) {
          return Promise.reject(new Error('没有更多了'));
        }
        return getHomeRecommend(this.curPage).then(data => {
          return new Promise(resolve => {
            if (data) {
              this.curPage++;
              this.totalPage = data.totalPage;
              this.recommends = this.recommends.concat(data.itemList);
              this.$emit('loaded', this.recommends);
              resolve();
            }
          });
        });
      }

还有点不是很懂,请问在getHomeRecommend函数里返回promise对象,是不是为了后续调用getRecommend函数的时候能链式使用.then呢,老师解释为什么要加上返回promise对象是因为要判断data是否有值,但是去掉promise对象,也不影响data的判断啊,就是老师解释的这个原因让我有点不懂。

非常感谢!

正在回答

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

4回答

同学你好,你说的是如下这里的return new promise吗?若是这里的话,理解是没有问题的哦,http://img1.sycdn.imooc.com//climg/5c00cf540001ebac06610358.jpg

继续加油,祝学习愉快!

  • hpbrave 提问者 #1
    绕了一圈。。。非常感谢!
    2018-11-30 13:52:31
好帮手慕糖 2018-11-30 12:00:01

同学你好,不太理解你说的“像以前一样不返回promise对象”,是什么意思,不过Promise的then()方法会返回一个Promise实例,因此可以一直调用then。建议:同学在看下es6的Promise课程,加深下印象哦。

希望能帮助到你,欢迎采纳。

祝学习愉快!

  • 提问者 hpbrave #1
    就是本来getHomeRecommend的then里面是没有return new promise的(第6章之前),后来为了做上拉更新热卖推荐组件才添加的。我想问的就是这个,就是为什么老师要在getHomeRecommend的then函数里添加return new promise,因为不添加的话也不影响pulltoLoadMore调用updata.then(). 然后发现好像是因为这样就可以控制resolve函数了,当data有值时就执行,没有时就不执行。就是想问我理解的这个对不对。
    2018-11-30 12:10:50
好帮手慕糖 2018-11-30 10:30:20

你好,1、同学现在有点绕哦,可以在查看下,pulltoLoadMore中调用的是getRecommend,而getRecommend,调用的是getHomeRecommend。

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

2、then方法是promise的方法,没有promise的话,是无法使用then的。

3、返回的data可以直接作为下一个then的参数,是指的在getRecommend中调用的是getHomeRecommend的这里的情况,这里说的可能没有特别详细,是指回调函数的参数,如下,这里的res与data;但是不适用于end这个,因为end本身是一个方法,不是一个回调的参数。

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

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

4、作为回调函数的的是resolve(data)这种形式,如三中的图的样式。

希望能帮助到你,欢迎采纳。

祝学习愉快!

  • 提问者 hpbrave #1
    谢谢回复,怎么感觉越来越绕了。。。想请问下,如果getHomeRecommend.then()里像以前一样不返回promise对象,pulltoLoadMore调用getRecommend的时候,还可以继续then么
    2018-11-30 11:26:22
好帮手慕糖 2018-11-29 15:27:56

同学你好,调用后可以链式使用.then是一个原因,返回data也是一个原因哦,返回的data可以直接作为下一个then的参数,这样的使用是比较便捷的。

希望能帮助到你,祝学习愉快!

  • 提问者 hpbrave #1
    我又看了两遍老师的视频,感觉有点懂了,麻烦您帮我看看对不对:如果getHomeRecommend里没有promise,则pulltoLoadMore调用它的时候,无论如何都会执行.then(end),而加上promise以后,则把end,也就是resolve放到了if (data)里面,只有当有data的时候,才会执行end。是这样理解么?还有您说的返回data作为下一个的参数,在这个例子里是成立的么?如果要让data作为下一个的参数,是不是需要resolve(data)这样呢?非常感谢!
    2018-11-29 19:48:03
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星
热门框架Vue开发WebApp 18版
  • 参与学习           人
  • 提交作业       209    份
  • 解答问题       3299    个

本路径是通过ES6基础知识、运用Zepto、Swiper、fullPag等移动端常用工具包、以及当下流行框架Vue,结合多个实战案例,还原真实开发场景,最终实现手机端购物商城网页开发。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

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