前言:
之前看ES6文檔的時候知道Promise then的基本概念,但是沒有深入理解它。知其然,卻不知其所以然。導致自己在之前的項目中犯了一個很可笑的錯誤。今天寫代碼過程中也遇到了Promise then,藉此機會深入學習下它,也好糾正一下自己的錯誤。
爲什麼要用Promise then
(1)之前多層請求回調:
request(url,params,function(res1){
request(url,params,function(res2){
request(url,params,function(res3){
request(url,params,function(res4){
......
})
})
})
})
(2)用Promise then後的多層請求回調:
function sendRequest(url,params){
return new Promise(function(resolve,reject){
request(url,params,resolve,reject)
})
}
sendRequest(url,params).then(fuction(data1){
}).then(function(data2){
}).then(function(data3){
}).then(function(data4){
}).then(function(data5){
})...
兩種方式對比起來結果顯而易見,第一種方式層層嵌套比較暈人;第二種方式一目瞭然。Promise的結果在then中回調函數處理,第一個then處理完成後返回結果給作爲第二個then的參數繼續在回調函數處理,依此往後推(前面的輸出作爲後面的輸入,類似於Linux種的管道命令)。
而我之前沒有明白爲啥要使用Promise then,就犯了一個很愚蠢的錯誤!下面是我之前在項目中寫下的可笑的代碼:
sendRequest(url,params).then(function(data1){
sendRequest(url,params).then(function(data2){
sendRequest(url,parmas).then(function(data3){
.......
})
})
})