前端-處理異步問題的幾種方式

一.利用promise處理異步問題

promise是什么?

1.promise是ES6引入的新語法
2.主要用于處理異步調用
3.原生ajax的異步調用如果需要按照一定順序執(zhí)行的話,很容易造成“回調地獄”,代碼維護和代碼可讀性極低。利用promise可以很好地將這一問題解決,將嵌套調用改為線性調用。
4.promise是一個對象

2.promise實例

new Promise(
  function(resolve,reject){
//..一段消耗時間的代碼操作
  resolve('success')  //數(shù)據(jù)正常操作拋出
  reject('error')//數(shù)據(jù)處理異常拋出
  }
).then(
(res) => {//成功的回調}
(err) => {//失敗的回調}
)

-promise的三種狀態(tài):
1.pending 初始狀態(tài)
2.fulfilled 成功狀態(tài)
3.rejected 失敗狀態(tài)
-當promise里的狀態(tài)發(fā)生轉變的時候,就會觸發(fā)then()。
-需要注意的一點事promise的狀態(tài)已經(jīng)改變,則不會在發(fā)生改變。
-resolve 的作用是將正在處理中的狀態(tài),變?yōu)槌晒顟B(tài),并將結果作為參數(shù)傳遞出去。
-reject的作用是將正在處理中的狀態(tài),變?yōu)槭〉臓顟B(tài),并將結果作為參數(shù)傳遞出去。

利用promise處理多種異步請求的例子如下:

new Promise(
  function(resolve,reject){
//..一段消耗時間的代碼操作
  resolve('success')  //數(shù)據(jù)正常操作拋出
  reject('error')//數(shù)據(jù)處理異常拋出
  }
)
.then(
(res) => {
//..一段消耗時間的代碼操作
return res
})
.then( (res) =>{
//..一段消耗時間的代碼操作
return res
}
.then( (res)=>{
//..一段消耗時間的代碼操作
return res
})

}

這樣就將“回調地獄”變?yōu)橐欢尉€性的操作,有利于代碼可讀性和維護性。

promise的其他用法:

promise.all([a1,a2,a3]) 用于多個promoise實例,接受一個數(shù)組作為參數(shù)當所有的異步請求完成,才會返回結果。
Promise.race() 類似于Promise.all() ,區(qū)別在于他只要有一個完成則就馬上返回結果。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容