Promise 對象(筆記)

1.Promise 實(shí)例

定義一個(gè)Promise實(shí)例,接收一個(gè)函數(shù),函數(shù)中的兩個(gè)參數(shù)分別是resolve和reject。resolve是異步操作成功之后調(diào)用,reject是失敗之后調(diào)用。

const promise = new Promise(function(resolve, reject) {
  
});

注意:Promise 創(chuàng)建后就會(huì)立即執(zhí)行,狀態(tài)變?yōu)槭』蛘叱晒χ缶筒粫?huì)再改變了。

2.Promise.prototype.then()

Promise實(shí)例生成以后,會(huì)有一個(gè)then方法。(這個(gè)then方法是定義在原型對象Promise.prototype上的)。then方法的第一個(gè)參數(shù)是resolved狀態(tài)的回調(diào)函數(shù),第二個(gè)參數(shù)(可選)是rejected狀態(tài)的回調(diào)函數(shù)。

promise.then(function(value) {
  // success
}, function(error) {
  // failure
});

then方法可以鏈?zhǔn)秸{(diào)用:前一個(gè)回調(diào)函數(shù),有可能返回的還是一個(gè)Promise對象(即有異步操作),這時(shí)后一個(gè)回調(diào)函數(shù),就會(huì)等待該P(yáng)romise對象的狀態(tài)發(fā)生變化,才會(huì)被調(diào)用。

const p = function(greeting) {
        return new Promise((resolve) => {
            setTimeout(() => {
                resolve(greeting)
            }, 1000)
        })
}

p("hello").then(value => {
       console.log(value); //1s之后彈出hello
       return p("world");
 }).then(value => {
      console.log(value); //再過1s彈出world
})

注意,如果某一個(gè)then執(zhí)行后狀態(tài)變?yōu)閞ejected,就不會(huì)繼續(xù)執(zhí)行then方法,而是執(zhí)行rejected回調(diào)函數(shù)。

3.Promise.prototype.catch()

如果不想使用then的第二個(gè)參數(shù)去處理錯(cuò)誤,可以使用catch。

p.then(value => {
     // success
}).catch(error => {
     // failure
});

4.Promise.prototype.finally()

finally方法用于指定不管 Promise 對象最后狀態(tài)如何,都會(huì)執(zhí)行的操作。(ES2018 引入標(biāo)準(zhǔn)的)

promise
.then(result => {···})
.catch(error => {···})
.finally(() => {···});

5.Promise.all()

Promise.all方法把多個(gè)實(shí)例包裝成一個(gè)新的 Promise 實(shí)例,當(dāng)幾個(gè)實(shí)例都是成功狀態(tài),則新實(shí)例p就是成功狀態(tài)。如果某一個(gè)是失敗狀態(tài),則新實(shí)例就是失敗狀態(tài)。

const p = Promise.all([p1, p2, p3]);

注意:如果某個(gè)參數(shù)不是promise實(shí)例,則會(huì)把它自動(dòng)轉(zhuǎn)換為promise實(shí)例。

6.Promise.race()

Promise.race()也是把多個(gè)實(shí)例包裝成一個(gè)新的實(shí)例,當(dāng)其中某一個(gè)實(shí)例率先改變狀態(tài),p的狀態(tài)就跟著改變。那個(gè)率先改變的 Promise 實(shí)例的返回值,就傳遞給p的回調(diào)函數(shù)。

const p = Promise.race([p1, p2, p3]);

注意:如果某個(gè)參數(shù)不是promise實(shí)例,也會(huì)把它自動(dòng)轉(zhuǎn)換為promise實(shí)例。

7.Promise.resolve()

將現(xiàn)有的對象轉(zhuǎn)換為Promise 對象,并且狀態(tài)為resolved。

Promise.resolve('foo')
// 等價(jià)于
new Promise(resolve => resolve('foo'))

注意: 參數(shù)是一個(gè)promise實(shí)例,會(huì)直接返回這個(gè)實(shí)例。

8.Promise.reject()

返回一個(gè)rejected狀態(tài)的Promise 對象。

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

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

  • Promise 對象 Promise 的含義 Promise 是異步編程的一種解決方案,比傳統(tǒng)的解決方案——回調(diào)函...
    neromous閱讀 8,836評論 1 56
  • 一、Promise的含義 Promise在JavaScript語言中早有實(shí)現(xiàn),ES6將其寫進(jìn)了語言標(biāo)準(zhǔn),統(tǒng)一了用法...
    Alex灌湯貓閱讀 888評論 0 2
  • 前言 本文旨在簡單講解一下javascript中的Promise對象的概念,特性與簡單的使用方法。并在文末會(huì)附上一...
    _暮雨清秋_閱讀 2,315評論 0 3
  • 1. Promise 的含義 所謂Promise,簡單說就是一個(gè)容器,里面保存著某個(gè)未來才會(huì)結(jié)束的事件(通常是一個(gè)...
    ROBIN2015閱讀 581評論 0 0
  • 喜歡夜晚 燈下 思考著生活點(diǎn)點(diǎn) 筆下 記錄了悲歡離合 喜歡夜晚 一杯清茶 品出淡香悠遠(yuǎn)的歲月 一杯烈酒 飲出豪情萬...
    心安何所歸閱讀 761評論 8 26

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