簡單理解Promise

概念

我理解的Promise就是一套為處理異步情況的方法。先創(chuàng)建一個promise對象來注冊一個委托,其中包括委托成功及失敗后的處理函數(shù)。然后基于這種表述方式,來將promise應用到各種異步處理的情況中。

Promise的一個寫法案例

var promise = getAsyncPromise('fileA.txt');
promise.then( function(result){
      // 成功時的處理辦法
}).catch( function(error){
      // 失敗時的處理辦法
})

// 返回一個promise對象

基于這種統(tǒng)一的書寫方式,就可以簡便的實現(xiàn)回調(diào),不需要去設(shè)計函數(shù)的名字,同時因為返回的是promise對象,可是實現(xiàn)連續(xù)的then調(diào)用。

使用Promise

一般情況下,我們會使用new Promise()來創(chuàng)建promise對象。
比如在一個AJAX請求中,使用promise來寫:

function ajax(options){
   return new Promise(resolve, reject){
     let {method, url} = options;
     let xhr = new XMLHttpRequest();
     xhr.open(method,url);
     xhr.readystatechange = function(){
          if(xhr.readystate >=200 && xhr.readystate<400){
              resolve.call(null,xhr.responseText)
          }else if(xhr.readystate >= 400){
              reject.call(null,xhr.status)
          }
        }
     }
    xhr.send();
}

調(diào)用如下:

ajax({method:'GET',url:'www.baidu.com' })
  .then(function(responseText){
    console.log('我成功了')
    console.log(responseText)
  },function(status){
    console.log('我失敗了')
    console.log(status)
  }
)

使用promise,對于異步的處理更加清晰簡潔,一目了然,且promise支持鏈式調(diào)用,所以甚至可以這么用

promise.then(resolve,reject).then(resolve,reject)

其中的resolve和reject分別代表成功和失敗的函數(shù)。

兩個常用的Promise API

Promise.all ([promise1,promise2..])

返回一個新的Promise對象,當該promise對象內(nèi)的參數(shù)對象都成功的狀態(tài)下才會觸發(fā)成功,有一個失敗則立即觸發(fā)失敗。

Promise.race ([promise1,promise2..])

當參數(shù)里的任意一個promise成功或失敗后,該函數(shù)就會返回,并使用這個promise對象的值進行resolve或reject

基本用法如下:

    let promise1 = ajax({method:'GET',url:'/x.json'});
    let promise2 = ajax({method:'GET',url:'/y.json'});
    Promise.all([promise1,promise2]).then(function(){
        console.log('兩個promise都執(zhí)行完成了')
    });
    Promise.race([promise1,promise2]).then(function(){
        console.log('有一個promise先執(zhí)行完成了')
    })
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

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

  • 本文適用的讀者 本文寫給有一定Promise使用經(jīng)驗的人,如果你還沒有使用過Promise,這篇文章可能不適合你,...
    HZ充電大喵閱讀 7,466評論 6 19
  • Promiese 簡單說就是一個容器,里面保存著某個未來才會結(jié)束的事件(通常是一個異步操作)的結(jié)果,語法上說,Pr...
    雨飛飛雨閱讀 3,494評論 0 19
  • 00、前言Promise 是異步編程的一種解決方案,比傳統(tǒng)的解決方案——回調(diào)函數(shù)和事件——更合理和更強大。它由社區(qū)...
    夜幕小草閱讀 2,230評論 0 12
  • 你不知道JS:異步 第三章:Promises 在第二章,我們指出了采用回調(diào)來表達異步和管理并發(fā)時的兩種主要不足:缺...
    purple_force閱讀 2,261評論 0 4
  • 這一路想了很多 終點再遠 也會有到達的那一刻 人生再長 也會慢慢被我們消磨殆盡 很多時候 總在抱怨自己沒有別人優(yōu)秀...
    樂樂閱讀 210評論 0 0

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