JS----promise

2020-10-09  本文已影响0人  JuMinggniMuJ

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方法有两个参数,是resolvereject的回调函数,但是大多情况下我们都都将它作为预期的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
})
上一篇下一篇

猜你喜欢

热点阅读