promise

promise

定義:是ES6新增的一個(gè)對(duì)象。我們可以使用promise來許下一個(gè)承諾。

promise用來處理異步代碼。把異步代碼寫成同步形式。解決回調(diào)地獄。

promise有三種狀態(tài):

1、Pending:進(jìn)行中。(會(huì)變化)

2、Resolved(又稱Fufilled):已完成。不會(huì)變化

3、 Rejected:已失敗。不會(huì)變化

注意:只有異步操作的結(jié)果,可以決定當(dāng)前是哪一種狀態(tài),任何其他操作都無法改變這個(gè)狀態(tài)。
使用promise的時(shí)候

1、先new一個(gè)實(shí)例對(duì)象。需要傳兩個(gè)函數(shù)

new Promise((resolve, reject) => {
         setTimeout(() => {
            let num = Math.random()
            if (num > 0.5) resolve()
            else reject()
         }, 1000);
      })

2、聲明一個(gè)變量接收這個(gè)實(shí)例對(duì)象

 let pro = new Promise((resolve, reject) => {
         setTimeout(() => {
            let num = Math.random()
//resolve實(shí)際上執(zhí)行的是then里面的代碼
            if (num > 0.5) resolve()
            else reject()
         }, 1000);
      })

3、然后再變量名.then(成功之后要做的事情).catch(失敗之后要做的事)

 pro.then(() => {
         console.log('這個(gè)數(shù)比較大');
      }).catch(() => {
         console.log('這個(gè)數(shù)比較小');
      })

promise封裝get

1、封裝

 // 基于promise的get請(qǐng)求
    // return new promise
    fetch: function (url, query, isJSON) {
        if (query) {
            url += '?'
            for (var key in query) {
                url += `${key}=${query[key]}&`
            }
            url=url.slice(0,-1)
        }
        return new Promise(function(resolve,reject){
            let xhr=new XMLHttpRequest()
            xhr.open('get',url)
            xhr.send()
            xhr.onreadystatechange=function(){
                if (xhr.readyState===4) {
                    if (xhr.status===200) {
                        let resp=isJSON?JSON.parse(xhr.responseText):xhr.responseText
                        resolve(resp)
                    }else {
                        reject()
                    }
                }
            }
        })
    }

2、在頁面中使用:

<button onclick="setMsg()">發(fā)送請(qǐng)求</button>

<body>
   <script>
      function setMsg() {
         //   把異步代碼寫成同步形式,不用傳會(huì)低矮函數(shù)了,而是在then里面處理成功之后的函數(shù)
         util.fetch('地址', { 參數(shù) }, true).then(function (resp) {
            console.log(resp);
         })
      }

   </script>
</body>
?著作權(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)容

  • 00、前言Promise 是異步編程的一種解決方案,比傳統(tǒng)的解決方案——回調(diào)函數(shù)和事件——更合理和更強(qiáng)大。它由社區(qū)...
    夜幕小草閱讀 2,226評(píng)論 0 12
  • 摘自:阮一峰 http://es6.ruanyifeng.com/#docs/promise 一、首先,我們要弄明...
    泡杯感冒靈閱讀 853評(píng)論 0 4
  • Promiese 簡(jiǎn)單說就是一個(gè)容器,里面保存著某個(gè)未來才會(huì)結(jié)束的事件(通常是一個(gè)異步操作)的結(jié)果,語法上說,Pr...
    雨飛飛雨閱讀 3,490評(píng)論 0 19
  • 目錄:Promise 的含義基本用法Promise.prototype.then()Promise.prototy...
    BluesCurry閱讀 1,565評(píng)論 0 8
  • Promise含義 Promise是異步編程的一種解決方案,比傳統(tǒng)的解決方案——回調(diào)函數(shù)和事件——更強(qiáng)大。所謂Pr...
    oWSQo閱讀 1,137評(píng)論 0 4

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