From f0837dbfdfc2e677928d67b4fbc0410d3f79f126 Mon Sep 17 00:00:00 2001
From: kangkai <kangk26@foxmail.com>
Date: Wed, 07 Apr 2021 19:49:09 +0800
Subject: [PATCH] Promise约定与链式调用

---
 Promise.html |   40 ++++++++++++++++++++++++++++------------
 1 files changed, 28 insertions(+), 12 deletions(-)

diff --git a/Promise.html b/Promise.html
index 43a81cc..a8fe8fe 100644
--- a/Promise.html
+++ b/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>

--
Gitblit v1.9.3