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'); })