學習阮一峯老師的ES6入門後的記錄es6
<script> let promise = new Promise(function(resolve,reject){//resolve和reject是函數 console.log('promise建立'); resolve(); }) promise.then(function(){//至關於resolve() // console.log(a);//error跳到.catch console.log('promise的執行完成了'); }) .catch(function(){//至關於reject() console.log('promise的執行失敗了'); }) </script>
.then()方法中的參數,fn1是resolved狀態的回調函數,fn2(可選)是rejected狀態的回調函數,通常只用fn1來做爲promise成功的處理函數
注意:.then()返回的是一個新的promise實例,.then(fn1)fn1中的返回的數據做爲新promise的參數promise
.then(null/undefined,function(){})的別名,是發生錯誤是的回調函數
注意:在promise執行順序中當.then()的成功處理函數執行,致使不會執行.catch()中的函數,反之同樣瀏覽器
不管是執行.then()仍是執行.catch(),finally都會執行異步
<script> let promise = new Promise(function(resolve,reject){ let i = 1; resolve(i);//調用.then()中的方法 i++; reject(i);//調用.catch()中的方法,不能與.then()一塊兒執行 }) promise .then(function(num){ console.log(num); }) .catch(function(num){ console.log(num); }) .finally(function(){//不論執行.then仍是.catch,finally都會執行 console.log('finally'); }) </script>
promise對象.then,.catch爲微任務函數
<script> setTimeout(function(){ console.log('setTimeout執行了');//宏任務 }) let promise = new Promise(function(resolve,reject){ console.log('promise執行了');//主進程 resolve();//or reject(); }) promise .then(function(){ console.log('.then執行了');//微任務 }) .catch(function(){ console.log('.catch執行了');//微任務 }) .finally(function(){ console.log('finally執行了');//微任務 }) </script>
上面代碼的執行順序是:
學習