Promise對象

寫在前面:最近刷面經,被問到很多關於ES6的問題,當提到promise時,本以爲回答的還不錯,可是之後被懟了,說我理解得有問題,鬱悶之餘回來惡補一下,才發現自己當時只回答一些皮毛,這些不是面試官想聽到的,敗軍之將,羞愧難當,寫下此文章。覆車之鑑,望後人警示。

引流阮一峯大佬的文章-->Promise 對象

面試回答:

promise就是用來解決 異步 處理的, 不管在vue 中 還是 其他的 地方, 都一樣, 一般vue 中我們會用axios來解決接口的問題, 但是如果有多個 接口A,B,C需要按照順序調的時候, 就需要在封裝axios的時候用promise , 做到 等待 前一個 接口A 完成, 再 執行B , 形成一個鏈式調用。

手寫代碼:

function fun(){
   return new Promise((resolve,reject) => {
      axios.post(url,data)
          .then(response => {
            resolve(response.data);
          },err => {
            reject(err)
          })
    })
}
const promise=new Promise((resolve,reject)=>{
    axios.get(url,params)
})
promise.then(res=>{
    
})
promise.catch(err=>{
    
})

純理論:Promise 是異步編程的一種解決方案,比傳統的解決方案——回調函數和事件——更合理和更強大。它由社區最早提出和實現,ES6 將其寫進了語言標準,統一了用法,原生提供了Promise對象。

Promise對象代表一個異步操作,有三種狀態:pending(進行中)、fulfilled(已成功)和rejected(已失敗)。

一旦狀態改變,就不會再變,任何時候都可以得到這個結果。

promise有兩個參數,成功、失敗(resolve,reject)

有了Promise對象,就可以將異步操作以同步操作的流程表達出來,避免了層層嵌套的回調函數。此外,Promise對象提供統一的接口,使得控制異步操作更加容易

Promise也有一些缺點。首先,無法取消Promise,一旦新建它就會立即執行,無法中途取消。其次,如果不設置回調函數,Promise內部拋出的錯誤,不會反應到外部。第三,當處於pending狀態時,無法得知目前進展到哪一個階段(剛剛開始還是即將完成)。

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