目前高級瀏覽器如Chrome、Firefox都已經(jīng)內(nèi)置了Promise對象。Promise完全改變了js異步編程的寫法,讓異步編程變得十分的易于理解。
Promise/A+規(guī)范:
- 一個promise可能有三種狀態(tài):等待(pending)、已完成(fulfilled)、已拒絕(rejected)
- 一個promise的狀態(tài)只可能從“等待”轉到“完成”態(tài)或者“拒絕”態(tài),不能逆向轉換,同時“完成”態(tài)和“拒絕”態(tài)不能相互轉換
- promise必須實現(xiàn)then方法(可以說,then就是promise的核心),而且then必須返回一個
- 同一個promise的then可以調(diào)用多次,并且回調(diào)的執(zhí)行順序跟它們被定義時的順序一致
- then方法接受兩個參數(shù),第一個參數(shù)是成功時的回調(diào),在promise由“等待”態(tài)轉換到“完成”態(tài)時調(diào)用,另一個是失敗時的回調(diào),在promise由“等待”態(tài)轉換到“拒絕”態(tài)時調(diào)用。同時,then可以接受另一個promise傳入,也接受一個“類then”的對象或方法,即thenable對象。