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(失败) 则执行.catchPromise.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>