前言:
之前看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){
.......
})
})
})