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

来源:3-1 Loading组件

lcyjerry

2020-05-08 17:51:21

    }).then(data => {

        return new Promise(resolve => {

            console.log(data)

            setTimeout(() => {

                resolve(data);

            }, 2000);

        })

    })

这一步为什么不能替换成

then(data => {

        setTimeout(() => {

            return data

        }, 1000);

    })


写回答

3回答

好帮手慕夭夭

2020-05-09

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

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

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

http://img.mukewang.com/climg/5eb6686c0943c09510180111.jpg

祝学习愉快 ~

0

好帮手慕夭夭

2020-05-09

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

祝学习愉快 ~

0
hcyjerry
h 意思是catch只能这样用?只能跟在promise后面吗?
h020-05-09
共1条回复

好帮手慕夭夭

2020-05-08

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

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

http://img.mukewang.com/climg/5eb53ca90948b79005990196.jpg

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

http://img.mukewang.com/climg/5eb53cc0093cf8a303860132.jpg

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

http://img.mukewang.com/climg/5eb53d1e096d5f8304910306.jpg

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

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

0
hcyjerry
h 老师你说它会把undefined转换为一个promise,相当于promise.resolve 那原来老师写的return new promise是不是没有必要了?
h020-05-09
共2条回复

0 学习 · 10739 问题

查看课程