promise

关于ES6中promise的学习:
这几天想到了以前的一个问题,一个项目中的前端页面要同时发送多个请求到服务端并且多个请求的返回数据是相互依赖的(比如:这几个请求返回数据中的多个账户余额相加,并且如果有一个请求出错则默认改账户余额为0)。这样的话我们利用以前的ajax来实现的话是这样的:
$,ajax({
url:"",
success:function(){
//成功之后发第二个请求
$,ajax({
url:"",
success:function(){
//成功之后发第三个请求

},
error:function(){
//也许失败后的发第三个请求
}
})
},
error:function(){
//也许失败后的发第二个请求
$,ajax({
url:"",
success:function(){
//成功之后发第三个请求

},
error:function(){
//也许失败后的发第三个请求
}
})
}
})
多个请求相互嵌套造成代码不够直观,并且如此操作令人心态炸裂。
我们用promise对象后那就十分舒服了

let myPermise1=function(){
return new promise(function(resolve,reject){
$,ajax({
url:"",
success:function(data){
resolve(data)
},
error:function(data){
reject(data)
}
})
}

let myPermise2=function(){
return new promise(function(resolve,reject){
$,ajax({
url:"",
success:function(data){
resolve(data)
},
error:function(data){
reject(data)
}
})
}
let myPermise3=function(){
return new promise(function(resolve,reject){
$,ajax({
url:"",
success:function(data){
resolve(data)
},
error:function(data){
reject(data)
}
})
}
使用promise
myPermise1().then(function(data1){
// data1指myPermise1中resolve的data下同
return myPermise2()
},function(data){
//rejected 失败
}
).then(function(data2){
return myPermise3()
}).then(function(data3){

})
链式调用十分方便。
再简化all属于promise对象是等待多个异步操作完成
盗图
promise
promise.all([myPermise1(),myPermise2(),myPermise3()]).then(function(result){
//result [data1,data2,data3]
})
race
多个请求都执行只会返回最快执行的结果
promise.race([myPermise1(),myPermise2(),myPermise3()]).then(function(result){
//result [data1] 假设data1执行的最快
})
可以用来配置请求超时操作

let Permise1=function(){
new promise(function(resolve,reject){
$.ajax({
url:""0,
sucess:function(data){
resolve(data)
}
})
})
}
let Permise2=function(){
new promise(function(resolve,reject){
setTimeOut(function(){
reject(“超时了”)
},10000)
})
}
promise.race([Permise1(),Permise2()]).then(function(result){
//result 若10秒有结果返回则resolve结果,不然10秒后执行reject函数报错超时提醒
}).catch(function(error){
console(error)
})