这里为什么不能这样替换?

这里为什么不能这样替换?

    }).then(data => {

        return new Promise(resolve => {

            console.log(data)

            setTimeout(() => {

                resolve(data);

            }, 2000);

        })

    })

这一步为什么不能替换成

then(data => {

        setTimeout(() => {

            return data

        }, 1000);

    })


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

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

3回答
好帮手慕夭夭 2020-05-09 16:24:32

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

1.是的,es6 promise就是这样用,固定记住。

2之前老师说了,老师就是想要一个1s之后再返回数据的效果,因为数据加载过快看不到加载的过程,所以用定时器模拟了一下。当然,同学不想要加这个效果,就可以不这样写哦~

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

祝学习愉快 ~

好帮手慕夭夭 2020-05-09 09:44:10

同学你好,catch是es6语法规定好的,用来捕获错误信息的,固定记住这样用就行。另外,不知道同学怎么写的,建议把代码全部粘贴上来,以便老师为你解答。

祝学习愉快 ~

  • 提问者 lcyjerry #1
    意思是catch只能这样用?只能跟在promise后面吗?
    2020-05-09 14:51:07
好帮手慕夭夭 2020-05-08 19:07:14

同学你好,如果写成第二个方式,那么then就没有设置返回值,返回值即undefined。如下:

第一个是给then设置了返回值,返回值是一个promise对象

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

第二个虽然设置了返回值,但是它是定时器的返回值。then没有设置自己的返回值,所以返回值即undefined。它会把undefined转换为一个promise,相当于promise.resolve(undefined),那么传递的数据就是undefined,所以不对哦。

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

你可以把定时器去掉,这样给then设置了返回值,转换为promise.resolve(res)就对了。

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

之所以老师那样写,是因为想要有一个加载的过程,让数据1s之后再返回,所以就返回了一个Promise对象哦。

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

  • 提问者 lcyjerry #1
    为啥可以接catch呢?还有老师我试了给定时器返回一个值,然后输出这个定时器,结果为什么值不是我返回的那个
    2020-05-08 22:40:22
  • 提问者 lcyjerry #2
    老师你说它会把undefined转换为一个promise,相当于promise.resolve 那原来老师写的return new promise是不是没有必要了?
    2020-05-09 14:51:51
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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