1、promise對(duì)象提供兩個(gè)回調(diào)函數(shù)即resolve和reject
resolve回調(diào)成功處理函數(shù),reject回調(diào)失敗處理函數(shù)。
const promise = new Promise(function(resolve, reject) {
// ... some code
if (/* 異步操作成功 */){
resolve(value);
} else {
reject(error);
}
});
注意:
1、對(duì)象的狀態(tài)不受外界影響。Promise對(duì)象代表一個(gè)異步操作,有三種狀態(tài):pending(進(jìn)行中)、resolved(已成功)和rejected(已失?。?。只有異步操作的結(jié)果,可以決定當(dāng)前是哪一種狀態(tài),任何其他操作都無(wú)法改變這個(gè)狀態(tài)。
2、一旦狀態(tài)改變,就不會(huì)再變,任何時(shí)候都只能得到這個(gè)結(jié)果。Promise對(duì)象的狀態(tài)改變,只有兩種可能:從pending變?yōu)閞esolved和從pending變?yōu)閞ejected。只要這兩種情況發(fā)生,狀態(tài)就凝固了,不會(huì)再變了,會(huì)一直保持這個(gè)結(jié)果,這時(shí)就稱為 resolved(已定型)。
3、如果改變已經(jīng)發(fā)生了,你再對(duì)Promise對(duì)象添加回調(diào)函數(shù),也會(huì)立即得到這個(gè)結(jié)果。這與事件(Event)完全不同,事件的特點(diǎn)是,如果你錯(cuò)過(guò)了它,再去監(jiān)聽(tīng),是得不到結(jié)果的。
2、Promise.then() 處理promise對(duì)象的結(jié)果
new Promise((resolve, reject) => {
resolve('正確回調(diào)處理');
// 或者
// reject('錯(cuò)誤回調(diào)處理);
}).then(ret => {
console.log(ret); // 正確回調(diào)處理
});
3、Promise.cath() 錯(cuò)誤處理
new Promise((resolve, reject) => {
resolve('正確回調(diào)處理');
// 或者
// reject('錯(cuò)誤回調(diào)處理);
}).cath(error => console.log('錯(cuò)誤處理'));
4、Promise.finally() 不管 Promise 對(duì)象最后狀態(tài)如何,都會(huì)執(zhí)行的操作
new Promise((resolve, reject) => {
resolve('正確回調(diào)處理');
// 或者
// reject('錯(cuò)誤回調(diào)處理);
}).finally(() => console.log('放在這里的都要執(zhí)行'));
5、Promise.all() Promise.all方法用于將多個(gè) Promise 實(shí)例,包裝成一個(gè)新的 Promise 實(shí)例
注意:
1、Promise.all方法接受一個(gè)數(shù)組作為參數(shù)。
2、Promise.all方法的參數(shù)可以不是數(shù)組,但必須具有 Iterator 接口,且返回的每個(gè)成員都是 Promise 實(shí)例。
3、Promise.all里面狀態(tài)都變成resolved,狀態(tài)才會(huì)變成resolved,此時(shí)返回值組成一個(gè)數(shù)組。
例:
Promise.all([
Promise.resolve('1'),
Promise.resolve('2'),
Promise.resolve('3'),
Promise.resolve('4'),
Promise.resolve('5')
]).then(res => {
console.log(res); // ["1", "2", "3", "4", "5"]
})
6、Promise.race() 跟 Promise.all()方法效果一致
不同的是:
只要p1、p2、p3之中有一個(gè)實(shí)例率先改變狀態(tài),p的狀態(tài)就跟著改變。那個(gè)率先改變的 Promise 實(shí)例的返回值,就傳遞給p的回調(diào)函數(shù)。
let p1 = Promise.resolve('1');
let p2 = Promise.resolve('2');
let p3 = Promise.resolve('3');
const p = Promise.race([p1, p2, p3]);
p.then(ret => console.log(ret)); // 1
7、Promise.resolve() 將現(xiàn)有對(duì)象轉(zhuǎn)為 Promise 對(duì)象 該狀態(tài)為resolve
Promise.resolve('成功了')
8、Promise.reject() 將現(xiàn)有對(duì)象轉(zhuǎn)為 Promise 對(duì)象 該狀態(tài)為reject
Promise.reject('錯(cuò)誤了')