能夠用到很多異步處理的回調(diào)函數(shù)之中,而且支持鏈?zhǔn)秸{(diào)用,主要是pending/resolved/rejected這三個(gè)狀態(tài)。
創(chuàng)建Promise對(duì)象
let myObj = new Promise(fucntion(resolve,reject){})
里面可以改變promise的狀態(tài)
通過resolve(data)表示進(jìn)程成功
通過reject(error)表示進(jìn)程失敗
回調(diào)函數(shù)
then方法支持兩個(gè)回調(diào)函數(shù),第一個(gè)是接受來自resolved里的數(shù)據(jù),第二個(gè)是接受rejected里的數(shù)據(jù),做回調(diào)函數(shù)處理
``
let myFunc = function(){
let helo = new Promise(function(resolve,reject){
if()
resolve(data);
if()
reject(error);
})
return helo //千萬記得return出去,不然外面沒監(jiān)聽到
}
myFunc().then(function(data){..},funcion(error){})
//支持鏈?zhǔn)秸{(diào)用,可以在then再次調(diào)用then,第二個(gè)then會(huì)接受第一個(gè)then里面的函數(shù)值作為參數(shù)逐步往下
//可以將其看作一個(gè)二叉樹 一邊是resolved,一邊是rejected
錯(cuò)誤捕捉
catch()是then(null,function(){})的別名,用于指定發(fā)生錯(cuò)誤時(shí)的回調(diào)函數(shù)
可以在Promise對(duì)象中 throw new Error('wrong code'),然后在catch()中可以wrong code被捕捉到
包裝多個(gè)Promise
Promise.all(promise1,promise2,promise3) 必須等到多個(gè)Promise對(duì)象的狀態(tài)均改變后,Promise.all才會(huì)改變狀態(tài)
Promise.race(p1,p2,p3) 當(dāng)一個(gè)Promise對(duì)象改變后,Promise.race()的狀態(tài)就會(huì)改變
改造為Promise對(duì)象
let hello = promise.resolve();
...
p.then(()=>{
...your code
})
同理 可以使用 p.catch()
常用鏈?zhǔn)秸{(diào)用
--
.done() done方法處于回調(diào)鏈的尾端,保證拋出任何可能出現(xiàn)的錯(cuò)誤
.finally()用于指定不管Promise對(duì)象最后狀態(tài)如何都會(huì)執(zhí)行的操作,可用于清除變量或者做一些善后的操作