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

Promise對(duì)象

Promise 表示一個(gè)異步操作的最終結(jié)果,與之進(jìn)行交互的方式主要是 then 方法,該方法注冊(cè)了兩個(gè)回調(diào)函數(shù),用于接收 promise 的終值或本 promise 不能執(zhí)行的原因。

Promise 的狀態(tài)

一個(gè) Promise 的當(dāng)前狀態(tài)必須為以下三種狀態(tài)中的一種:等待態(tài)(Pending)、執(zhí)行態(tài)(Fulfilled)拒絕態(tài)(Rejected)

  • 異步操作未完成(pending)
  • 異步操作成功(fulfilled)
  • 異步操作失?。╮ejected)

基本用法

Promise是一個(gè)構(gòu)造函數(shù),Promise接收一個(gè)參數(shù),這個(gè)參數(shù)是函數(shù),同時(shí)這個(gè)參數(shù)函數(shù)要傳入兩個(gè)參數(shù):resolve,reject,分別表示異步操作執(zhí)行成功后的回調(diào)函數(shù)和異步操作執(zhí)行失敗后的回調(diào)函數(shù)。

Promise對(duì)象上有then、catch等方法

var getAjax = function (url) {
    const promise=new Promise(function(resolve,reject){
    var xhr=new XMLHttpRequest()
    xhr.onreadystatechange=function(){
        if(xhr.readyState!==4){
            return
        }
        if(xhr.status===200){
            resolve('成功時(shí)調(diào)用resolve函數(shù),并返回一個(gè)Promise對(duì)象')
        }else{
            reject(new Error(xhr.statusText))
        }
    }
    xhr.open('GET',url)
    xhr.send()
    })
    return promise//返回promise對(duì)象
}
getAjax('./ajax.html')
    .then((data)=>{
            console.log('第一個(gè)參數(shù): '+ data)//打印resolve函數(shù)傳遞的參數(shù)
            return ('第一個(gè)then的第一個(gè)參數(shù)')//返回一個(gè)Promise對(duì)象并將數(shù)據(jù)傳遞給下一個(gè)then
        },(data)=>{
            console.log('第二個(gè)參數(shù): '+ data)//打印reject函數(shù)傳遞的參數(shù)
            return('第一個(gè)then的第二個(gè)參數(shù)')//返回一個(gè)Promise對(duì)象并將數(shù)據(jù)傳遞給下一個(gè)then
            }
        )
    .then((data)=>{
        //如果剛開(kāi)始在getAjax函數(shù)中是調(diào)用reject函數(shù),第一個(gè)then方法才會(huì)執(zhí)行第二個(gè)參數(shù),但是后面的then方法只執(zhí)行第一個(gè)參數(shù)
            console.log('第一個(gè)參數(shù): '+ data)//打印上一個(gè)then方法傳遞的參數(shù)
            return ('第二個(gè)then的第一個(gè)參數(shù)')
        },(data)=>{
            console.log('第二個(gè)參數(shù): '+ data)
            return ('第二個(gè)then的第二個(gè)參數(shù)')
        }
    )
    .then((data)=>{
            console.log('第一個(gè)參數(shù): '+ data)
        },(data)=>{
            console.log('第二個(gè)參數(shù): '+ data)
        }
    )

異步操作成功時(shí)調(diào)用resolve:


1.png

異步操作失敗時(shí)調(diào)用reject:


2.png

總結(jié):

  • Promise是一個(gè)構(gòu)造函數(shù),通過(guò)new命令創(chuàng)建promise對(duì)象。在創(chuàng)建對(duì)象的時(shí)候傳遞一個(gè)參數(shù),這個(gè)參數(shù)是一個(gè)函數(shù),這個(gè)函數(shù)有兩個(gè)參數(shù),這兩個(gè)參數(shù)分別是resolve和reject,它們是兩個(gè)函數(shù),由 JavaScript 引擎提供,不用自己實(shí)現(xiàn)。成功時(shí)調(diào)用resolve方法,失敗時(shí)調(diào)用reject方法。

  • 在promise對(duì)象上有then方法,這個(gè)方法可以傳遞兩個(gè)參數(shù),這兩個(gè)參數(shù)是函數(shù)。

  • 如果調(diào)用resolve函數(shù),就會(huì)調(diào)用then方法的第一個(gè)參數(shù)。如果調(diào)用的是reject函數(shù),就會(huì)調(diào)用then方法的第二個(gè)參數(shù)。不管第一個(gè)then調(diào)用第一個(gè)參數(shù)還是第二個(gè)參數(shù),第一個(gè)then方法后面的then方法都會(huì)執(zhí)行第一個(gè)參數(shù)。

  • resolve方法和reject方法需要帶參數(shù),這個(gè)參數(shù)會(huì)傳遞給then方法對(duì)應(yīng)的參數(shù) 。在then方法中返回?cái)?shù)據(jù)時(shí),可以傳遞給下一個(gè)then方法。

?著作權(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)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • Promise 對(duì)象 Promise 的含義 Promise 是異步編程的一種解決方案,比傳統(tǒng)的解決方案——回調(diào)函...
    neromous閱讀 8,836評(píng)論 1 56
  • title: promise總結(jié) 總結(jié)在前 前言 下文類似 Promise#then、Promise#resolv...
    JyLie閱讀 12,419評(píng)論 1 21
  • Promiese 簡(jiǎn)單說(shuō)就是一個(gè)容器,里面保存著某個(gè)未來(lái)才會(huì)結(jié)束的事件(通常是一個(gè)異步操作)的結(jié)果,語(yǔ)法上說(shuō),Pr...
    雨飛飛雨閱讀 3,491評(píng)論 0 19
  • Promise含義 Promise是異步編程的一種解決方案,比傳統(tǒng)的解決方案——回調(diào)函數(shù)和事件——更強(qiáng)大。所謂Pr...
    oWSQo閱讀 1,137評(píng)論 0 4
  • 日期:7月6日 學(xué)習(xí):蔓越莓 感受:昨天生病的小朋友媽媽今天沒(méi)有搭我話,但是家里一個(gè)不經(jīng)常聯(lián)系的小妹妹說(shuō)支持我的,...
    美文環(huán)保超市閱讀 272評(píng)論 0 0

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