Promise學(xué)習(xí)筆記

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ò)誤了')
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Promise 對(duì)象 Promise 的含義 Promise 是異步編程的一種解決方案,比傳統(tǒng)的解決方案——回調(diào)函...
    neromous閱讀 8,834評(píng)論 1 56
  • Promiese 簡(jiǎn)單說(shuō)就是一個(gè)容器,里面保存著某個(gè)未來(lái)才會(huì)結(jié)束的事件(通常是一個(gè)異步操作)的結(jié)果,語(yǔ)法上說(shuō),Pr...
    雨飛飛雨閱讀 3,490評(píng)論 0 19
  • 1. Promise 的含義 所謂Promise,簡(jiǎn)單說(shuō)就是一個(gè)容器,里面保存著某個(gè)未來(lái)才會(huì)結(jié)束的事件(通常是一個(gè)...
    ROBIN2015閱讀 581評(píng)論 0 0
  • 一、Promise的含義 Promise在JavaScript語(yǔ)言中早有實(shí)現(xiàn),ES6將其寫進(jìn)了語(yǔ)言標(biāo)準(zhǔn),統(tǒng)一了用法...
    Alex灌湯貓閱讀 887評(píng)論 0 2
  • 目錄:Promise 的含義基本用法Promise.prototype.then()Promise.prototy...
    BluesCurry閱讀 1,565評(píng)論 0 8

友情鏈接更多精彩內(nèi)容