promise
作用:处理异步任务结果,更优雅,更好的一种方式
let promise=new Promise(function(resovle,reject){
resovle(data)
reject(err)
})
promise.then(function(data){
处理成功结果
})
promise.catch(function(err){
处理失败结果
})
三种状态不可逆
promise状态是私有的,外部不能检测到,他有三种状态pending(待定),fulfilled(兑现),rejected(拒绝),这三种状态是不可以逆的,无论是从待定到成功还是拒绝,他的状态就是成功或拒绝的
<script>
const promise=new Promise((resovle,reject)=>{
setTimeout(function(){
if(true){
resovle('成功')
}else{
reject('失败')
}
},1000)
})
promise.then((data)=>{
console.log(data);
})
//1秒钟后输出成功
promise.catch((err)=>{
console.log(err);
})
</script>
回调地狱问题
ajax({
url:'请求1地址',
succes:function(res1){
ajax({
url:'请求地址2',
succes:function(res2){
ajax({
url:'请求地址3',
sucess:function(res3){
console.log(res3)
}
...
})
}
})
}
})
像这种嵌套称为地狱嵌套,在维护起来非常麻烦
promise使用链式调用解决回调地狱问题
new Promise((resolve,reject)=>{
ajax({
url:'地址1',
succes(res1){
resolve(res1)
}
})
}).then((data)={
return new Promise((resolve,reject)=>{
ajax({
url:'地址2',
succes(res2){
resolve(res2)
}
})
})
}).then((data)=>{
return new Promise((resolve,reject)=>{
ajax({
url:'地址3',
succes(res3){
console.log(res3)
}
})
})
})
Promise常用方法
- Promise.resovle()
var p=Promise.resovle('hello')
p.then(function(s){
console.log(s)
})
//结果hello
//以上代码生成一个新的Promise对象实例,回调函数会立即执行,Promise.resolve方法的
//参数就是回调函数的参数
- Promise.reject()
var p=Promise.reject('出错了')
p.then(null,function(s){
console.log(s)
})
//结果出错了
//以上代码生成一个新的Promise对象实例,回调函数会立即执行,Promise.resolve方法的
//参数就是回调函数的参数
- Promise.race()
Promise.race([promise1,promise2]).then((data)=>{
console.log(data)
})
//竞争执行,谁先返回谁执行
- Promise.all()
Promise.all([promise1,promise2]).then((datas)=>{
console.log(datas)
})
//返回后一起执行