ES6 -Promise对象
作用:解决异步回调问题
1.语法
let promise=new Promise(function(resolve,reject){
// resolve 成功回调函数
// reject 失败回调函数
})
promise.then(successFn,failFn);
promise.catch(failFn) :reject,发生错误,别名
一般用法:promise.then(res=>{}).catch(err=>{})
let a=2; let promise=new Promise(function(resolve,reject){ if(a==1){ resolve('sucess'); }else{ reject('fail'); } }); promise.then(successFn,failFn); promise.then(res=>{ console.log(res); },err=>{ console.log(err); //fail }); // catch :reject,发生错误,别名 promise.catch(err=>{ console.log(err); //fail }) // 一般用法:promise.then(res=>{}).catch(err=>{}) promise.then(res=>{ console.log(res); }).catch(err=>{ console.log(err); //fail })
2.Promise.resolve('aa');//将现有的内容,转成一个promise对象,resolve成功状态
let p1=Promise.resolve('aa');
// 等价于
// let p1=new Promise(resolve=>{
// resolve('aa');
// })
p1.then(res=>{
console.log(res);//aa
})
3. Promise.reject('bb');//将现有的内容,转成一个promise对象,reject失败状态
let p2=Promise.reject('bb');
// 等价于
// let p2=new Promise((resove,reject)=>{
// reject('bb')
// })
p2.catch(err=>{
console.log(err);//bb
})
4.let p= Promise.all([p1,p2,p3]):把多个promise打包,到一个数组里面,打包完还是一个promise对象
1)只有p1、p2、p3都是resolve成功状态,p的状态才会变成 resolve成功,返回数组
2)只要p1、p2、p3之中有一个被rejected,p的状态就变成rejected,返回第一个被reject的实例的返回值
let p1=Promise.resolve('aa');
let p2=Promise.resolve('bb');
let p3=Promise.resolve('cc');
let p4=Promise.reject('dd');
let p5=Promise.reject('ee');
// 1)只有p1、p2、p3都是resolve成功状态,p的状态才会变成 resolve成功,返回数组
Promise.all([p1,p2,p3]).then(res=>{
console.log(res);//["aa", "bb", "cc"]
let [res1,res2,res3]=res;
console.log(res1,res2,res3);//aa bb cc
}).catch(err=>{
console.log(err);
});
// 2)只要p1、p2、p3之中有一个被rejected,p的状态就变成rejected,返回第一个被reject的实例的返回值
Promise.all([p1,p2,p3,p4,p5]).then(res=>{
console.log(res);
}).catch(err=>{
console.log(err);//dd
})
5. let p=Promise.race([p1,p2,p3]):只要p1、p2、p3之中有一个实例率先改变状态,p的状态就跟着改变。
那个率先改变的 Promise 实例的返回值,就传递给p的回调函数。
let p1=Promise.reject('aa');
let p2=Promise.reject('bb');
let p3=Promise.resolve('cc');
Promise.race([p1,p2,p3]).then(res=>{
console.log(res);
console.log('success')
}).catch(err=>{
console.log(err);//aa
console.log('fail');
})
浙公网安备 33010602011771号