关于es6中promise的使用,我也看了其它的博客,但是这里要强调一点,promise是优化回调地狱的问题,并不是“解决”
Promise本身是一个对象,是一个构造函数,它需要传入一个参数,并且这个参数必须是函数;传入的这个函数本身包含两个参数resolve和reject,这两个参数也分别是函数
1.promise存在的三个状态,pedding(正在进行),reslove(已完成),reject(已失败)
2. 基础语法:
var p = new Promise(function(resolve,reject){
// 已完成状态确定
resolve();
// 已失败状态确定
reject();
})
p.then(function(){
console.log("已完成");
}).catch(function(){
console.log("已失败")
})
其中then方法有两个参数一个是resolve,一个是reject,但由于Promise抛出错误具有冒泡性质,会一直向后传递,传到catch中,所以一般错误处理放在catch中,then中只处理成功。
补充:
3. promise的方法:
实例的方法:
– - var p = new Promise(()=>{})
– - p.then()
– - p.catch()
构造函数的方法:
– - Promise.all([p1,p2,p3]);// 所有promise的状态都是成功,才成功,只要有一个失败,就是失败
– - Promise.race([p1,p2,p3]);//只要有一个状态结束了,就执行对应的结果,不管是成功还是失败
4.最终使用:
function ajax(){
return new Promise(function(resolve,reject){
// 开启异步的程序
// 异步程序执行完毕,得到状态后,根据状态执行已完成或已失败
// 已完成状态确定
resolve();
// 已失败状态确定
reject();
})
}
ajax().then(()=>{}).catch(()=>{})
什么时候使用呢?处理成功和失败,有回调且异步的时候就可以使用,以及操作异步的数据的时候也可以,操作异步数据也可以用ES8的async和await,当然也可以用回调解决,promise也有其他特性比如连缀