promise的基本使用

  • promise的作用
    解决异步回调问题和毁掉地狱问题。
  • promise的语法
new Promise((resolve,reject)=>{
resolve  //成功时的调用
reject //失败时的调用
})

promise使用demo:

const flag=true
let p=new Promise((resolve,reject)=>{
if(flag){
resolve('success')
}else{
reject(new Error('fail'))
}
})

//调用方式1
p.then(res=>{
console.log(res)
},err=>{
console.log(err)
})

//调用方式2
p.then(res=>{
console.log(res)
}).catch(err=>{
console.log(err)
})

catch()方法的使用

  • 方式一
const flag=false
let promise=new Promise((resolve,reject)=>{
if(flag){
resolve('success')
}else{
reject('fail')
}
})
promise.then(res=>{
console.log(res)
}).catch(err=>{
console.log(err)
})
  • 方式二
const flag=false
let promise=new Promise((resolve,reject)=>{
if(flag){
resolve('success')
}else{
reject('fail')
}
})

promise.then(res=>{})
promise.catch(err=>{})

resolve()方法的使用

resolve()方法的使用有两种方式:

  • 方式一
let promise=new Promise(resolve=>{
resolve('success')
})
promise.then(res=>{})
  • 方式二
let promise=Promise.resolve('success')
promise.then(res=>{})

reject()方法的使用

reject()方法的使用有两种方式:

  • 方式一
let promise=new Promise((resolve,reject)=>{reject('fail')})
promise.then(res=>{}).catch(err=>{})
  • 方式二
let promise=Promise.reject('fail')
promise.catch(err=>{})

Promise.all()方法

  • 描述
    把promise对象打包放到数组里,promise对象必须是成功状态才有返回。接受的参数是promise数组,成功时返回结果数组,失败返回状态值。应用场景:发送多个ajax请求,在此之前有loading加载图标当都请求成功后loading图标消失。
  • Promise.all()方法使用
let p1=Promise.resolve('success1')
let p2=Promise.resolve('success2')
let p3=Promise.resolve('success3')
Promise.all([p1,p2,p3]).then(res=>{
console.log(res) //输出:[success1,succes2,success3]
})

注:Promise.all方法返回成功结果数组元素顺序和all()方法中数组顺序对应。

Promise.race(Promise对象)方法

  • 描述
    该方法中哪个Promise对象获得的结果返回的快就返回那个结果,无论是成功还是失败。
  • 使用
let func=(time)=>{
return new Promise((resolve,reject)=>{
timeOut(()=>{resolve(`${time/1000}秒唤醒`)},time)
})
}
let p1=func(2000)
let p2=func(3000)
Promise.race([p1,p2]).then(res=>{
console.log(res)  //输出:2秒唤醒
})

Promise.allSettled()方法

  • 描述
    Promise.allSettled(p1,p2,p3)方法返回一个数组,有一个Promise对象是成功状态就返回(返回成功状态结果)。应用场景:不需要所有异步任务都返回成功的情况。
  • 使用
let p1=new Promise((resolve,reject)=>{
setTimeout(()=>{resolve('商品1')},1000)
})
let p2=new Promise((resolve,reject)=>{
setTimeout(()=>{reject('商品2')},1000)
})
let p3=new Promise((resolve,reject)=>{
setTimeout(()=>{resolve('商品3')},1000)
})
Promise.allSettled([p1,p2,p3]).then(res=>{
console.log(res) //[商品1,商品3]
})

Promise.any()方法

  • 描述
    该方法用于返回第一个成功的Promise,只要有一个成功的Promise此方法就会终止。
  • 使用
let func=(time)=>{
return new Promise((resolve,reject)=>{
setTimeout((time)=>{
resolve(`${time/1000}秒唤醒`)
},time)
})
}
let p1=func(2000)
let p2=func(1000)
Promise.any([p1,p2]).then(res=>{
console.log(res) //1秒唤醒
})
最后修改:2022 年 02 月 17 日
如果觉得我的文章对你有用,请随意赞赏