首先了解一下什么是Promise:
Promise簡單來說就是個替代回調(diào)函數(shù)執(zhí)行的東東,作為異步操作的處理方法之一。
(回調(diào)函數(shù)是指在作為對象傳入主函數(shù),在在主函數(shù)處理完之后執(zhí)行的函數(shù))
那么為什么要用這個呢?
日常經(jīng)常有那種執(zhí)行完一個函數(shù)繼續(xù)執(zhí)行下一個函數(shù)的需求,例如最簡單的每秒輸出數(shù)字1.2.3....,這樣會形成嵌套,就像套娃娃一樣,一個大的里面有一個小的,處理起來很麻煩。
舉個小栗子:

所以我們要進行處理操作,一般promise有三種狀態(tài):pending(等待態(tài)),fulfiled(成功態(tài)),rejected(失敗態(tài));
常見寫法為:
let p = ?new Promise(resolve, reject){}.then();
例子:
原來的寫法

按照Promise的寫法

Promise的構(gòu)造函數(shù)接收一個參數(shù),是函數(shù),并且傳入兩個參數(shù):resolve,reject,分別表示異步操作執(zhí)行成功后的回調(diào)函數(shù)和異步操作執(zhí)行失敗后的回調(diào)函數(shù).
按照標準來講,其實resolve是將Promise的狀態(tài)置為fullfiled,reject是將Promise的狀態(tài)置為rejected,promise的常用用法.
注意:在then方法中的function 調(diào)用的next方法,一定要用return ,否則不會通過resolve把數(shù)據(jù)往下傳遞( 通俗點講就是下一個異步操作,接收不到上一步的結(jié)果 ).
then能接受兩個參數(shù),由reject傳數(shù)據(jù)給第二函數(shù);

和then不同?catch 是用于接受錯誤信息的(reject)(推薦用這種)

resolve所給的值由then接受,reject的值由catch接受。
Promise.all 與?Promise.race
這兩者有何不同呢,一個是在全部異步加載完之后顯示全部,一個是執(zhí)行完最快的那個立馬顯示
例如:

瀏覽器上顯示:

race:

瀏覽器上顯示:
