Promise 对象代表了未来将要发生的事件,用来传递异步操作的消息
Promise是ECMAscript 6 的一个新东西,它能提供链式操作能力和类似于try catch的代码处理能力
1.基本使用:
new Promise((resolve,reject){
if(right){
resolve('right_data')
}else{
reject('wrong_data')
}
}).then(value=>{
right code
}).catch(err=>{
wrong code
})
2.then方法:
then方法有两个参数,是resolve和reject的回调函数,但是大多情况下我们都都将它作为预期的resolve回调:
new Promise((resolve,reject){
some code you want
}).then(value=>{
right code
},err=>{
wrong code
})
3.catch方法:
catch方法和try catch的用法相似,当我们在Promise对象中调用reject()方法、抛出异常(throw new Error(err_msg))或者语法错误的时候,并不会直接浏览器报错,而会在catch中接收,它相当于then()函数的第二个参数,但是会比then()函数的第二个回调函数更加强大一些
new Promise((resolve,reject){
some code you want
}).catch(err=>{
wrong code
})
4.all方法:
promise对象存在一个all方法,它用于同时执行多个函数,并且以执行最慢的函数执行回调,它的回调参数是它执行的多个函数返回的结果依次排列组成的数组,当有一个函数执行失败,那么就会直接调用catch方法:
let function1()
let function2()
let function3()
Promise.all([function1(),function2(),function3()]).then(value=>{
//当三个函数都执行成功之后执行
console.log(value) //打印结果:[function1.res, function2.res, function3.res]
}).catch(err=>{
//只要有一个执行失败便回调
wrong code
})
5.race方法:
race()方法远比all()方法宽松的多,all()方法需要全部函数执行成功才能回调then()函数,race()方法是只要有一个函数执行成功便会回调then()函数,并且它的then()函数参数是执行成功的最快的那一个函数返回结果
let function1()
let function2()
let function3()
Promise.race([function1(),function2(),function3()]).then(value=>{
//三个函数中只要有一个执行成功便会回调
console.log(value) //打印结果:first_success_function_res
}).catch(err=>{
//都没有执行成功才会回调
wrong code
})
网友评论