老师你好,有个问题

老师你好,有个问题

1.

 const movePromise = () => {

            return new Promise((resolve=> {

               setTimeout(resolve,1000)

                });

            })

        }

 const movePromise = () => {

            return new Promise((resolve=> {

               setTimeout(()=>{

                    resolve();

                    },1000)

                });

            })

        }

是否等价,有何不同?

2.

结合课程一开始的例子:

const move = (el, { x = 0y = 0 } = {}, end = () => { }) => {

            el.style.transform = `translate3d(${x}px,${y}px,0)`;


            el.addEventListener('transitionend', () => {

                end();

            }, false);

        };

老师在视频中说用promise包装一下:

const movePromise = (elpoint=> {

            return new Promise((resolve=> {

                move(elpoint, () => {

                    resolve();

                });

            })

        }

如此包装,与:

 const movePromise = (elpoint=> {

            return new Promise((resolve=> {

                move(elpoint, resolve);

            })

        }

是否等价?会造成什么后果?会产生错误吗?

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

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

1回答
好帮手慕小李 2021-12-09 11:08:52

同学你好:

1、两种不等价,不同在于第一种在页面加载完成后直接执行(原因setTimeout 的第一个参数是函数,如用resolve做第一参数,那么setTimeout上来就会执行,起不到延时的效果),第二种会遵循定时器时间延迟1秒后执行。

为了更好的给同学举例,老师给代码稍微做了小小的改动如下:

https://img1.sycdn.imooc.com//climg/61b1661b09f697c608200447.jpg

https://img1.sycdn.imooc.com//climg/61b166cc0960c0fd07650596.jpg

2、对于老师视频中讲解的例子来说,第2问中两种写法是等价的,但它们是有区别的。如下:

https://img1.sycdn.imooc.com//climg/61b172ef0973948b05240340.jpg

同学自己试试,祝学习愉快。

  • 第一问中,我在setTimeout里传入的是resolve,是没有括号的,你怎么加了个括号,即使加参数也应该是

     const movePromise = () => {

                return new Promise((resolve) => {

                   setTimeout(resolve,1000,'你好')

                    });

                })

            }


    2021-12-09 11:18:50
  • 第一问中,resolve我没有加括号呀,你怎么加了括号,如果要加参数,那也应该是

     const movePromise = () => {

                return new Promise((resolve) => {

                   setTimeout(resolve,1000,'你好')

                    });

                })

            }


    2021-12-09 11:42:24
  • 第一问中,我在setTimeout中的resolve没加括号呀,你怎么加了括号,如果要加参数也是这样加: const movePromise = () => { return new Promise((resolve) => { setTimeout(resolve,1000,"你好") }); }) }
    2021-12-09 12:25:29
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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