Promise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理且更强大。它最早由社区提出并实现,ES6将其写进了语言标准,统一了用法,并原生提供了Promise对象。
特点:
1.对象的状态不受外界影响 (Pending(进行) Resolve(成功) Reject(失败))
2.一旦状态改变就不会再变
简单用法
var promise = new Promise(function(resolve, reject){
if (/* 异步操作成功 */) {
resolve(value);
} else {
reject(error);
}
})
深入动手
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script>
function promise1(status){
return new Promise((resolve,reject)=>{
if(status){
resolve('1成功了')
}else{
reject('1失败了')
}
})
}
function promise2(status){
return new Promise((resolve,reject)=>{
if(status){
resolve('2成功了')
}else{
console.log('2失败了')
reject('2失败了')
}
})
}
function promise3(status){
return new Promise((resolve,reject)=>{
if(status){
resolve('3成功了')
}else{
console.log('3失败了')
reject('3失败了')
}
})
}
function promise4(status){
return new Promise((resolve,reject)=>{
if(status){
resolve('4成功了')
}else{
reject('4失败了')
}
})
}
promise1(true).then(res=>{
console.log(res,111)
return promise2(true)
}).then(res=>{
console.log(res,222)
return promise3(true)
}).then(res=>{
console.log(res,333)
return promise4(true)
}).then(res=>{
console.log(res,444)
}).catch(err=>{
console.log(err)
})
//原始
function fun1(){
console.log('成功')
}
function fun2(){
fun1()
}
function fun3(){
fun3()
}
function fun4(){
fun3()
}
let promise = new Promise((resolve,reject)=>{
resolve('成功')
})
promise().then(res=>{
console.log('成功')
}).catch(err=>{
console.log('失败')
})
//all (数组)
//all方法,数组内的promose必须全部成功 才会执行.then方法 不然的话 就执行.catch方法
Promise.all([promise1(true),promise2(true),promise3(true)]).then(res=>{
console.log('全部执行成功')
}).catch(err=>{
console.log('执行失败')
})
Promise.all([promise1(true),promise2(false),promise3(true)]).then(res=>{
console.log('全部执行成功')
}).catch(err=>{
console.log('执行失败')
})
//race(数组)
//race 执行的时候遇到resove(成功) 就执行.then 但是当第一个为resolve(失败) 则执行.catch
Promise.race([promise1(true),promise2(false),promise3(false)]).then(res=>{
console.log('race成功')
}).catch(err=>{
console.log('race成功执行失败')
})
Promise.race([promise1(false),promise2(true),promise3(true)]).then(res=>{
console.log('race成功')
}).catch(err=>{
console.log('race成功执行失败')
})
</script>
</body>
</html>