Promise的作用
- ES6之前:异步操作通常采用:回调函数和事件监听的方式,再处理Ajax请求的时候,通常要嵌套多层回调函数,很难理清,又叫做回调地狱;
- Promise的出现就是为了解决回调地狱的问题,让结构更清晰;
语法
- new Promise()对象, 以及
.then()方法:let p1 = new Promise(function(resolve,reject){ resolve();//成功时调用 reject(); //失败时调用 }) p1.then(res=>{console.log(res)}, rej=>{console.log(err)}); //通常会把第二个参数rej,放到catch里面去处理 p1.then(res=>{console.log(res)}).catch(err=>{console.log(err)}); //.then 返回promise对象,所以可以链式操作,解决回调地狱问题 - Promise 的其他方法:
let p1 = Promise.resolve('res'); //转成一个promise对象,状态为resolve; let p2 = Promise.reject('err'); //转成一个promise对象,状态为reject; let pArr1 = Promise.all([p1,p2,p3]); //打包多个promise对象到数组,但仍是promise对象可以用.then(); //必须确保所有promise对象都为resolve才回返回 let pArr2 = Promise.race([p1,p2,p3]); //只要有一个是resolve,就返回;