1、什么是Promise
Promise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和更强大。
Promise自己身上有all、reject、resolve这几个方法,原型上有then、catch等方法。
2、Promise的是三种状态
pending(进行中)
fulfilled(已成功)
rejected(已失败)
3、Promise的特点
1、对象的状态不受外界影响。Promise对象代表一个异步操作,只有异步操作的结果,可以决定当前是哪一种状态,
2、一旦状态改变,就不会再变,任何时候都可以得到这个结果
3、当处于pending(进行中)状态时,无法得知目前进展到哪一个阶段(刚刚开始还是即将完成)。
4、
new Promise:构造一个Promise实例
resolve:成功时候的回调
reject:失败时候的回调
then:成功执行
catch:捕获异常
new Promise创造了一个Promise实例。该实例接受一个函数作为参数,分别是resolve和reject。它们是两个函数,由 JavaScript 引擎提供,不用自己部署。
Promise实例生成以后,可以分别指定resolved(成功)状态和rejected(失败)状态的回调函数。
resolve是对promise成功时候的回调,它把promise的状态修改为fullfiled,那么,reject就是失败的时候的回调,他把promise的状态修改为rejected,
这样我们在then中就能捕捉到,然后执行“失败”情况的回调。与Promise对象方法then方法并行的一个方法catch,就是用来捕获异常的
let promise = new Promise((resolve,reject)=>{
setTimeout(()=>{
var num = Math.ceil(Math.random()*20); //生成1-10的随机数
if(num<=10){
resolve(num);//成功
}
else{
reject('数字大于10,即将执行失败回调');//失败
}
},1000)
})
promise
.then((res)=>{//成功执行
console.log('resolve,成功');
console.log('随机数生成的值:',res);
})
.catch((err)=>{//失败执行
console.log('reject,失败');
console.log(err);
})
5、all方法,该方法提供了并行执行异步操作的能力,并且在所有异步操作执行完后并且执行结果都是成功的时候才执行回调。
all方法接收一个数组参数,这组参数为需要执行异步操作的所有方法,里面的值最终都算返回Promise对象。这样,两个异步操作是并行执行的,等到它们都执行完后才会进到then里面。
两个异步操作返回的数据都在then里面,
all会把所有异步操作的结果放进一个数组中传给then,然后再执行then方法的成功回调将结果接收
function promise1(){
let promise = new Promise((resolve,reject)=>{
setTimeout(()=>{
var num = Math.ceil(Math.random()*20); //生成1-10的随机数
if(num<=10){
resolve(num);
}
else{
reject('数字大于10,即将执行失败回调');
}
},1000)
})
return promise;
}
function promise2(){
let promise = new Promise((resolve,reject)=>{
setTimeout(()=>{
var num = Math.ceil(Math.random()*20); //生成1-10的随机数
if(num<=10){
resolve(num);
}
else{
reject('数字大于10,即将执行失败回调');
}
},1000)
})
return promise;
}
Promise
.all([promise1(),promise2()])
.then((res)=>{//成功执行
console.log('resolve,成功');
console.log('随机数生成的值:',res);
})
.catch((err)=>{//失败执行
console.log('reject,失败');
console.log(err);
})