1.概念
簡單來講,promise是一個容器,里面存在著某個未來會發(fā)生的事件芜抒,從語法來講,promise是一個對象托启,從它可以獲取異步操作的信息
2.特點:
promise對象的狀態(tài)不受外界的影響宅倒,狀態(tài)有三種,pending屯耸,fullfilled拐迁,rejected,只有異步操作才能改變promise對象的狀態(tài)
promise對象的狀態(tài)一旦改變疗绣,就不會再變线召,任何時候都能得到這個結(jié)果。從pending變?yōu)閒ullfilled或者從pending變?yōu)閞ejected多矮,都成為resolved缓淹。
3.缺點:
無法取消
不設(shè)置回調(diào)函數(shù),promise內(nèi)部拋出的錯誤不會反饋到外部
當(dāng)處于pending狀態(tài)的時候,無法得知處于哪個階段讯壶。
4.promsise原型方法
promise.prototype.then
promise.prototype.catch
5.promise的方法
promise.all([p1,p2,p3]), promise.all方法接受一個數(shù)組作為參數(shù)料仗,
特點:promise的狀態(tài)是由p1,p2,p3共同來決定的,只有p1,p2,p3的狀態(tài)都為fullfilled時鹏溯,或者 p1,p2,p3中有一個狀態(tài)為rejected時罢维,此時第一個被rejected的實例的返回值會傳遞給promise的回調(diào)函數(shù),才會調(diào)用回調(diào)函數(shù)
promise.race([p1,p2,p3])
特點:只要p1,p2,p3中一個狀態(tài)發(fā)生變化丙挽,promise對象的狀態(tài)就會發(fā)生改變
promise.reject() 返回一個新的promise實例肺孵,狀態(tài)為rejected
6.將對象轉(zhuǎn)換為promise對象
promise.resolve()
7.兩個附加方法
done() done方法處于回調(diào)鏈的尾端,保證拋出任何可能出現(xiàn)的錯誤颜阐; done方法可以提供fullfilled和rejected狀態(tài)作為回調(diào)函數(shù)平窘,也可以不提供任何參數(shù)
finally() finally方法用于指定不管promise對象最后的狀態(tài)是什么都會執(zhí)行的操作。
它與done的最大區(qū)別是凳怨,它的參數(shù)是一個普通的回調(diào)函數(shù)瑰艘,該函數(shù)不管怎么樣都要執(zhí)行。
8.當(dāng)不想?yún)^(qū)分函數(shù)f是同步還是異步肤舞,都想用then方法指定下一步流程紫新,用catch方法來拋出錯誤
方法:
利用async()函數(shù) eg: (async() =>f())()
使用new Promise() eg: (()=>{new Promise(resolve => resolve(f()))})()
使用promise.try() eg: promise.try(f) promise.try 模擬了try代碼塊