談?wù)剬romise的理解(面試題)

導(dǎo)讀:

在我們面試過程中,面試官一般都會選擇問這樣一個問題:談一談對Promise的理解?

那接下來宣渗,我們就來詳細(xì)的了解一下Promise,相信認(rèn)真閱讀之后鞍恢,就有一個比較完整的答案啦!

1.Promise解決的問題

1)回調(diào)地獄

1.1)什么是回調(diào)地獄蟆炊?

簡單來說:就是 無限的在回調(diào)函數(shù)里面進(jìn)行回調(diào)函數(shù)的調(diào)用--回調(diào)函數(shù)的嵌套

<script>
    //第一次請求
      $.ajax({
          url: './111.txt',
          success: function (res) {
              console.log(res)  //222

              // 第二次請求
              $.ajax({
                  url: './' + res + '.txt',
                  success: function (result) {
                      console.log(result)

                    //第三次請求
                      $.get('./'+result+'.txt',function(response){
                          console.log(response)
                          //繼續(xù)寫對應(yīng)的請求或者別的事件
                      })
                  }
              })
          }
      })
</script>
1.2)回調(diào)函數(shù)的缺點:
  • 代碼可維護(hù)性極低
  • 對于閱讀代碼非常不友好
1.3)Promise產(chǎn)生背景:

為了解決回調(diào)地獄的問題污秆,以及使異步的請求有同步執(zhí)行的機制疾层,ES6幫我們增加了一個Promise的對象來解決這個問題痛黎,這也是Promise產(chǎn)生的背景掖蛤。

1.4)異步的概念:

異步(Asynchronous, async)是與同步(Synchronous, sync)相對的概念。

在我們學(xué)習(xí)的傳統(tǒng)單線程編程中,程序的運行是同步的(同步不意味著所有步驟同時運行墓拜,而是指步驟在一個控制流序列中按順序執(zhí)行)港柜。而異步的概念則是不保證同步的概念,也就是說咳榜,一個異步過程的執(zhí)行將不再與原有的序列有順序關(guān)系夏醉。

簡單來理解就是:同步按你的代碼順序執(zhí)行,異步不按照代碼順序執(zhí)行涌韩,異步的執(zhí)行效率更高畔柔。

JavaScript 中的異步操作函數(shù)往往通過回調(diào)函數(shù)來實現(xiàn)異步任務(wù)的結(jié)果處理

  • 通過一張圖來更好的理解異步和同步的概念:
異步和同步的區(qū)別

2.Promise的三種狀態(tài)

  • pending (進(jìn)行中)
  • 此時代碼執(zhí)行尚未結(jié)束,所以也叫未處理的(unsettled)
  • fulfilld (已成功)
  • 表示異步代碼執(zhí)行成功臣樱,由resolve()觸發(fā)
  • rejected (已失敗)
    • 遇到錯誤靶擦,異步代碼執(zhí)行失敗,由reject()觸發(fā)

Promise 對象只有:從 pending 變?yōu)?fulfilled 和從 pending 變?yōu)?rejected 的狀態(tài)改變雇毫。

只要處于 fulfilled 和 rejected 奢啥,狀態(tài)就不會再變了即 resolved(已定型)。

3.Promise的特點

一旦狀態(tài)改變嘴拢,就不會再變桩盲,任何時候都可以得到這個結(jié)果。

Promise對象的狀態(tài)改變席吴,只有兩種可能:從pending變?yōu)閒ulfilled和從pending變?yōu)閞ejected赌结。

只要這兩種情況發(fā)生捞蛋,狀態(tài)就凝固了,不會再變了柬姚,會一直保持這個結(jié)果拟杉,這時就稱為 resolved(已定型)。

4.promise的方法

方法 類型 簡介
Promise.prototype.then() 原型方法 為 Promise 實例添加狀態(tài)改變時的回調(diào)函數(shù)
Promise.prototype.catch() 原型方法 為 Promise 實例指定發(fā)生錯誤時的回調(diào)函數(shù)
Promise.prototype.finally() 原型方法 用于指定不管 Promise 對象最后狀態(tài)如何量承,都會執(zhí)行的操作
Promise.resolve() 構(gòu)造函數(shù)方法 創(chuàng)建promise成功的實例
Promise.reject() 構(gòu)造函數(shù)方法 創(chuàng)建promise失敗的實例
Promise.all() 構(gòu)造函數(shù)方法 接收一個包含多個promise對象的數(shù)組搬设,等待所有都完成時,返回存放他們結(jié)果的數(shù)組撕捍,如果任意一個被拒絕拿穴,則立即拋出錯誤,其他已完成的結(jié)果會被忽略
Promise.race() 構(gòu)造函數(shù)方法 接收一個包含多個promise對象的數(shù)組忧风,等待第一個有結(jié)果(完成/拒絕)的promise默色,并把其result/error作為結(jié)果返回

5.promise使用場景

(1)同時拉去多個接口時

(2)數(shù)據(jù)量超大的接口回調(diào)處理

總結(jié):一般情況下,當(dāng)面試官問到這個問題的時候狮腿,我們只需要回答

promise解決了回調(diào)地獄的問題腿宰,promise有哪三種狀態(tài),promise的特點以及使用場景缘厢,

就可以啦吃度,相信面試官會滿意這個答案的!

ps:如果幫助你啦贴硫,動動小手點個贊??吧椿每!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市夜畴,隨后出現(xiàn)的幾起案子拖刃,更是在濱河造成了極大的恐慌删壮,老刑警劉巖贪绘,帶你破解...
    沈念sama閱讀 211,376評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異央碟,居然都是意外死亡税灌,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評論 2 385
  • 文/潘曉璐 我一進(jìn)店門亿虽,熙熙樓的掌柜王于貴愁眉苦臉地迎上來菱涤,“玉大人,你說我怎么就攤上這事洛勉≌掣眩” “怎么了?”我有些...
    開封第一講書人閱讀 156,966評論 0 347
  • 文/不壞的土叔 我叫張陵收毫,是天一觀的道長攻走。 經(jīng)常有香客問我殷勘,道長,這世上最難降的妖魔是什么昔搂? 我笑而不...
    開封第一講書人閱讀 56,432評論 1 283
  • 正文 為了忘掉前任玲销,我火速辦了婚禮,結(jié)果婚禮上摘符,老公的妹妹穿的比我還像新娘贤斜。我一直安慰自己,他們只是感情好逛裤,可當(dāng)我...
    茶點故事閱讀 65,519評論 6 385
  • 文/花漫 我一把揭開白布瘩绒。 她就那樣靜靜地躺著,像睡著了一般别凹。 火紅的嫁衣襯著肌膚如雪草讶。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,792評論 1 290
  • 那天炉菲,我揣著相機與錄音堕战,去河邊找鬼。 笑死拍霜,一個胖子當(dāng)著我的面吹牛嘱丢,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播祠饺,決...
    沈念sama閱讀 38,933評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼越驻,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了道偷?” 一聲冷哼從身側(cè)響起缀旁,我...
    開封第一講書人閱讀 37,701評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎勺鸦,沒想到半個月后并巍,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,143評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡换途,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,488評論 2 327
  • 正文 我和宋清朗相戀三年懊渡,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片军拟。...
    茶點故事閱讀 38,626評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡剃执,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出懈息,到底是詐尸還是另有隱情肾档,我是刑警寧澤,帶...
    沈念sama閱讀 34,292評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站怒见,受9級特大地震影響戒祠,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜速种,卻給世界環(huán)境...
    茶點故事閱讀 39,896評論 3 313
  • 文/蒙蒙 一姜盈、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧配阵,春花似錦馏颂、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至瘫拣,卻和暖如春亿絮,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背麸拄。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工派昧, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人拢切。 一個月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓蒂萎,卻偏偏與公主長得像,于是被迫代替她去往敵國和親淮椰。 傳聞我的和親對象是個殘疾皇子五慈,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,494評論 2 348