一.同步與異步
1. Promise作用:解決異步回調(diào)的問題
二.Promise對象
目的:創(chuàng)建異步對象,當(dāng)異步對象中的異步操作執(zhí)行完之后,再執(zhí)行想要執(zhí)行的東西。
1. resolve 表示將狀態(tài)變成成功完成,reject 表示將狀態(tài)變成失敗完成。
2. 當(dāng)resolve方法執(zhí)行完成之后,再執(zhí)行then方法。
let p = new Promise((resolve,reject)=>{
setTimeout(()=>{
console.log('執(zhí)行完畢!');
resolve();
//表示完成
},3000)
});
p.then(()=>{
console.log('promise異步操作完成了');
});
三.Promise傳參
- resolve里的參數(shù)可以傳給then
let p = new Promise((resolve,reject)=>{
setTimeout(()=>{
//console.log('脫完衣服');
resolve(3);
},3000)
});
p.then((d)=>{
console.log('去洗'+d+'件衣服');
});
-->打印去洗3件衣服
四.Promise錯誤處理
1. reject中存儲錯誤處理的參數(shù),可以傳給then方法中的第二個參數(shù)
let p = new Promise((resolve,reject)=>{
setTimeout(()=>{
//resolve('讀寫成功');
reject('讀寫失敗');
},2000)
});
p.then((d)=>{
console.log('執(zhí)行成功');
},(err)=>{
console.log(err);
});
-->讀寫失敗
五.Promise.all()-->一個腳本中有多個promise時,監(jiān)控多個Promise對象執(zhí)行完成
1.Promise.all([p1,p2,p3]):把promise打包,扔到一個數(shù)組里面,打包完還是一個promise對象.
let p1 = new Promise((resolve,reject)=>{
let time = Math.random()*4000+1000;
setTimeout(()=>{
console.log('p1完成');
resolve();
},time)
});
let p2 = new Promise((resolve,reject)=>{
let time = Math.random()*4000+1000;
setTimeout(()=>{
console.log('p2完成');
resolve();
},time)
});
let p = Promise.all([p1,p2)];
p.then(()=>{
console.log(全部執(zhí)行完畢);
})
-->p1和p2全部執(zhí)行完畢后,才會執(zhí)行p.then方法里的操作
必須確保所有promise對象都是resolve狀態(tài)
輸出["aaaa","bbbb","cccc"]
六.
1.Promise對象的then方法有兩個參數(shù),一個是成功后的參數(shù),另一個是失敗的參數(shù)方法
- promise.then(success,fail)
失敗鳥
2.new Promise().catch()-->錯誤捕獲
等同于上面的reject,返回“失敗鳥”
也可這樣使用
七.Promise的方法
1.Promise.resolve('xxx'):將現(xiàn)有的東西,轉(zhuǎn)成一個Promise對象,且是resolve成功狀態(tài)
輸出aaa
等價于下面這句話
2.Promise.reject('xxx'):將現(xiàn)有的東西,轉(zhuǎn)成一個Promise對象,且是reject失敗狀態(tài)
輸出aaaa
4.Promise.race():與all的不同之處在于,只要有一個是resolve狀態(tài)就可以返回
輸出aaaa









