web前端面試題對答篇:談談你對Promise的理解

回答這個問題時,個人不建議單純的從Promise的細節知識點答起,因爲這個問題的本質是擁有一定宏觀性的,如果僅僅回覆一些知識點恐怕是滿足不了面試官胃口的。

當然,如果這個問題回答不到點上,那麼後續面試官極有可能會拋出一些相關知識難點來對你進行打壓。倘若知識點也回答不出來,那麼只能出門右拐了……

所以建議你結合自身項目工作經驗可以考慮從以下幾個點去回答即可:

1、Promise 是一個構造函數,我們可以通過該構造函數來生成Promise的實例。

2、Promise 即承諾,後續必要兌現,一旦兌現則不可更改!其狀態有三:pending(等待)、resolved(成功)、rejected(失敗)。

3、Promise 是對回調函數的一種封裝,是對異步編程的一種改進(傳統解決異步編程的方式是通過回調函數,而回調嵌套過多會導致回調地獄(callbackhell)),我們可以通過Promise將自己的程序以同步的方式表達出來,從而可以解決代碼臃腫及可讀性差的問題。

4、Promise 的實例可以看做是一個狀態展示器,我們可以將擁有狀態及改變狀態的業務通過Promise來實現,然後再結合async function進一步提升程序的可讀性及易維護性。

5、與前端相關的很多技術體系庫均採用了Promise對象,比如Axios、antd等等,所以瞭解、熟練併合理的使用它是一名合格前端必備的技能。

6、在實際項目的開發中經常會遇到繼某一個函數執行結果之後,再進行入後續操作的場景,通過Promise就是一種非常好的解決方案。比如我們可以通過Promise對ajax進行封裝用於實現業務邏輯與數據的分離。

7、Promise雖然解決了我們項目開發中的很多問題,但我們也不能無腦的濫用。比如Promise.all,如果參數中promise有一個失敗(rejected),則此實例回調必然失敗(reject),就不會再執行then方法的回調了。在實際中可能只是一個不關鍵的數據加載失敗,往往會導致其他所有的數據不會顯示,使得項目的容錯性大大降低。所以我個人在開發過程中只會在必須依賴這幾個步驟全部加載成功後才能繼續向下執行的場景中採用它,比如圖片的預加載功能。
—————END—————
喜歡本文的朋友們,歡迎關注公衆號 張培躍,收看更多精彩內容!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章