關於Promise層層嵌套可讀性差問題


 

Promise 是異步編程的一種解決方案,比傳統的解決方案——回調函數和事件——更合理和更強大。它由社區最早提出和實現,ES6 將其寫進了語言標准,統一了用法,原生提供了 Promise對象
ES6 規定, Promise對象是一個構造函數,用來生成 Promise實例。
我們先來看看它的使用方法:
 1 const promise = new Promise(function(resolve, reject) {
 2 // ... some code  這里寫異步操作代碼
 3    ajax(api1,function(res){
 4          // 異步操作成功,請求數據成功
 5           resolve(value);//將promise設置為resolved完成狀態
 6    },function(error){
 7          // 異步操作失敗,請求數據失敗
 8           reject(error);////將promise設置為rejected失敗狀態
 9    })
10 
11 });
resolve函數的作用是 在異步操作成功時調用,並將異步操作的結果,作為參數傳遞出去;
reject函數的作用是 在異步操作失敗時調用,並將異步操作報出的錯誤,作為參數傳遞出去
 
Promise實例生成以后,可以用 then方法分別指定 resolved狀態和 rejected狀態的回調函數。
promise.then(function(value) {
// success
}, function(error) {
// failure
});

then方法可以接受兩個回調函數作為參數。第一個回調函數是Promise對象的狀態變為resolved時調用,第二個回調函數是Promise對象的狀態變為rejected時調用。其中,第二個函數是可選的,不一定要提供。這兩個函數都接受Promise對象傳出的值作為參數。

上面代碼也可成如下形式

promise.then(function(value) {
// success 
}).catch(function(error){
     //error
})

在success 里面我們可以發起第二個請求

 

promise.then(function(value) {
// success
     ajax(api2,function(res){
          
     })
}).catch(function(error){
     //error
})

 

這個時候我們的兩個請求明顯的就有順序

像是這樣  new Promise(ajax1).then(ajax2).catch() ,使用了鏈式調用代替了嵌套結構,這樣就避免了層層嵌套使的代碼可讀性太差!

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM