Promise解释原名叫做’承诺’,表达的意思是将来会执行的操作,代表异步操作;
特点:
它总共分为两个阶段和三个状态;
首先两个阶段是 unsettled未决阶段和 settled已决阶段;
然后三个状态 penging 等待和resolved 已处理以及reject 已拒绝
基本用法:
创建一个简单的Promise
代码演示:
<script type="text/javascript">
const pro = new Promise((resolve , reject) => {
if(true){
resolve(data)
}else{
reject(err)
}
})
</script>
由上面的代码可知这个构造函数接收两个函数作为参数,分别是resolve和reject,
当异步操作执行成功后,会将异步操作结果作为参数传入resolve函数并执行,此时 Promise对象状态从pending变为resolve;
失败则会将异步操作的错误作为参数传入reject函数并执行,此时 Promise对象状态从pending变为rejected;
相关API:
all()
这个方法会返回一个新的promise对象,如果里面所有的promise对象都成功才会触发,一旦有一个失败,则该promise对象为失败
写法:
const arr = Promise.arr()
race()
当参数中的任意一个promise对象完成时候,就马上回去使用完成的这个promise对象的结果,不管这个结果成功还是失败
写法
const arr = Promise.race()
Promise原型:
Promise 的实例具有 then 方法,主要作用是为 Promise 实例发生状态改变时添加回调函数,
Promise的catch主要返回一个Promise,并且处理拒绝的情况。
Promise的finally()指上一次promise 运行结束后,无论resolved还是 rejected,都会执行指定的回调函数。
代码演示一个基本的一个Promise
<script type="text/javascript">
const arr = [];
for(let i = 0 ; i < 5; i++){
arr.push(new Promise(resolve , reject) => {
//设置一个一次性定时器
setTimeout(() => {
//判断结果
if(Math.random() < 0.1){
console.log('成功')
resolve(i)
}else{
console.log('失败')
reject(i)
}
},1000)
})
}
const pro = Promise.race(arr);
pro.then(data => {
console.log('完成' + data)
})
pro.catch(err => {
console.log('未完成' + err)
})
</script>