老师,有些是我自己添加的注释,是对then方法的理解,不知道对不对,请老师指教,谢谢

老师,有些是我自己添加的注释,是对then方法的理解,不知道对不对,请老师指教,谢谢

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>then方法</title>
</head>
<body>
    <script>
        // 1.什么时候执行
        // ppending->fulfilled时,执行then的第一个回调函数
        // ppending->rejected时,执行then的第二个回调函数

        // // 2.执行后的返回值

        // // then方法执行后返回一个新的Promise对象
        // // 用的是回调函数,回调函数里面含有两个参数
        // // resolve或reject调用决定p的状态

        // const p=new Promise((resolve,reject)=>{
        //     resolve();
        // });

        // // 有了状态后,p调用then方法
        // // 可以给p重新定义一个变量p2

        // const p2=p.then(
        //     // 成功状态,调用第一个回调
        //     ()=>{},
        //     // 失败状态,调用第二个回调
        //     ()=>{}
        //     ).then().then();

        // console.log(p,p2,p===p2)     //Promise {<fulfilled>: undefined}     Promise {<pending>}    false



        //3.then方法返回的Promise对象的状态改变
        const p=new Promise((resolve,reject)=>{
            // resolve();
            reject();
        });

        // 有了状态后,p调用then方法
        // 判断then方法中回调了哪个函数
        // 第一个then是由p打点调用的;第二个then是const p2=p.then(),也就是p.then()返回新的调用对象p2调用的第二个then
        //哪个状态执行了,就考虑是哪个调用并执行了 
        // 为改变第二个then调用的状态,可以在回调函数中加上return

        p.then(
            // 成功状态,调用第一个回调
            ()=>{
                console.log('success');
            },
            // 失败状态,调用第二个回调
            ()=>{
                console.log('err');

                // 在then的回调函数中,return后面的东西,会用Promise包装一下
                // return undefined;
                // 等价于
                // return new Promise((resolve,reject)=>{
                //     // 默认是resolve,所以可以省略reject的书写
                //     resolve(undefined);
                // });

                // 用return进行传入参数
                // return 123; 
                // 等价于
                // return new Promise(resolve=>{
                //     resolve(123);
                // });
               
                // 默认返回的永远都是成功状态的Promise对象
                // 入股想要返回失败状态的Promise对象,可以自己重新写
                return new Promise((resolve,reject)=>{
                    reject('reason')
                })
            }
            ).then(
                (data)=>{
                    console.log('success2',data);
                },
                err=>{
                    console.log('err2',err);
                }
            ).then(data=>{
                console.log('success3',data);

                // 返回参数
                return undefined;
                // 等价于
                // return new Promise(resolve=>{
                //     resolve(undefined);
                // })
            },err=>{
                console.log('err3',err)
            });

            // 总结:then()可以连续打点调用;then()内部的状态取向与返回参数是由打点的Promise对象决定的;
    </script>
</body>
</html>


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

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

1回答
好帮手慕小李 2022-12-21 17:33:19

同学你好,从上述代码来看同学的思路是没有问题的。祝学习愉快!

问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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