前端学习编写的实例
kangkai
2021-04-07 f0837dbfdfc2e677928d67b4fbc0410d3f79f126
Promise约定与链式调用
1 files modified
40 ■■■■ changed files
Promise.html 40 ●●●● patch | view | raw | blame | history
Promise.html
@@ -11,28 +11,44 @@
            };
            function successCallBack1(){
                console.log("成功1");
                return new Promise((resolve,reject) => {
                    reject();
                })
            };
            function failureCallBack1(){
                console.log("失败1");
            };
            function successCallBack2(){
                console.log("成功2");
            };
            function failureCallBack2(){
                console.log("失败2");
            };
            const wait = ()=> new Promise((resolve,reject)=> {
                setTimeout(() => {
                    console.log('setTimeout1执行完毕');
                    console.log('setTimeout执行完毕');
                    resolve();
                }, 0);                                
            });
            //调用报错,wait2返回的是setTimeout方法。
            const wait1 = ()=> setTimeout(() => {
                console.log('setTimeout2执行完毕');
                return new Promise((resolve,reject)=> {
                    resolve();
                });
            }, 0);
            });
            const wait2 = ()=> new Promise((resolve,reject)=> {
                resolve();
                setTimeout(() => {
                    console.log('setTimeout执行完毕');
                }, 1000);
            });
            var use = wait().then(successCallBack,failureCallBack).then(successCallBack1,failureCallBack1);
            //Promise约定与链式调用
            //1.在本轮 事件循环 运行完成之前,回调函数是不会被调用的。以下是个错误示例,resolve回调方法要在setTimeout执行完后在调用。
            var use = wait2().then(successCallBack,failureCallBack);
            //2.即使异步操作已经完成(成功或失败),在这之后通过 then() 添加的回调函数也会被调用。
            var use2 = wait();
            setTimeout(() => {
                use.then(successCallBack,failureCallBack);
            }, 2000);
            //3.通过多次调用 then() 可以添加多个回调函数,它们会按照插入顺序进行执行。一般情况下then会返回一个默认的Promise对象。
            var use3 = wait().then(successCallBack,failureCallBack).then(successCallBack1,failureCallBack1).then(successCallBack2,failureCallBack2);
        </script>
    </head>
    <body>