老师可以看看我的注释对吗

老师可以看看我的注释对吗

以及,老师可以把代码执行的每一步顺序标注一下嘛,谢谢老师

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
function f(cb){
                setTimeout(function(){
                    // 如果不这样写,调用f函数时,没有传递参数,执行cb()这句代码会报错,到执行项目无法执行下去。
                    // 
                    // cb && cb()这种写法, 是为了保证传入cb之后,才执行cb(),如果没有传入cb, 就不会执行cb(),防止报错。
                    cb && cb();  //如果cb存在(存在的话必须是函数,否则会报错)就去调用cb方法
                },1000);
            }
             
            //回调地狱
            // f(function(){
            //     console.log(1);
            //     f(function(){
            //         console.log(2);
            //         f(function(){
            //             console.log(3);
            //             f(function(){
            //                 console.log(4);
            //                 f(function(){
            //                     console.log(5);
            //                     f(function(){
            //                         console.log(6);
            //                     })
            //                 })
            //             })
            //         })
            //     })
            // })
             
            //Promise
             
             
            //方法 用于请求数据(模拟)
            function f(){
                return new Promise(resolve => {  //Promise对象接收的这个形参resolve代表成功时候要做的事
                    setTimeout(function(){
                        resolve();   //1s后调用resolve函数。就是下面的匿名函数,可以在想去调用resolve()的时候去调用就可以了
                    },1000);
                })
            }
             
            //.then方法是每个promise实例都具有的,
            f()  //调用函数f,返回一个新的promise对象
                .then(function(){  //.then后面的匿名函数就是上面的形参resolve
                    console.log(1);
                    return f();  //必须调用f(),才可以返回一个promise实例,下面才可以调用.then方法
                })
                .then(function(){
                    console.log(2);
                    return f();
                })
                .then(function(){
                    console.log(3);
                    return f();
                })
             
            


函数f里面的resolve参数和resolve()方法都对应.then后面的匿名函数对吗?然后当调用f的时候,返回一个promise实例,所以可以调用then方法,,then中的匿名函数就是f函数里面一秒后执行的resolve(),这个resolve在一开始作为形参传递进来了,所以在回调中可以调用,这样理解对吗

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

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

2回答
好帮手慕糖 2020-07-05 13:54:36

同学你好,如下,同学标的这个执行就是正确的哦,先调用了f()函数,返回proise然后调用了then。再往后都是一样的哦。

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

祝学习愉快~

好帮手慕糖 2020-07-05 11:03:17

同学你好,关于同学的问题,回答如下:

1、注释这里,有一个小问题:

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

这里不重新调用f()也会生成一个promise实例。之后可以继续调用.then方法。因为.then方法可以自动返回一个promise实例实例哦。

不过在当前这个案例中,还是需要调用下的。因为返回的是新的promise实例,就不能使用原来promise实例中的计时器了。

如下,可以在计时器中添加一个输出。然后去掉.then中的f()调用,分别查看下效果。

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

2、其他理解是对的哦。

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

  • 提问者 hyperse #1
    好的,可是老师,可以帮忙标注一下代码的执行顺序嘛,我感觉上面跟下面代码是穿插执行的,所以有点混乱
    2020-07-05 12:11:57
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

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

帮助反馈 APP下载

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

公众号

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

在线咨询

领取优惠

免费试听

领取大纲

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