ES6学习记录十二:Promise

本文详细介绍了ES6中的Promise概念,包括其作用、基本写法、async/await的异步编程方式,以及Promise.all()和Promise.race()的使用。通过实例演示了如何避免回调地狱,实现更优雅的异步处理。
摘要由CSDN通过智能技术生成

一、什么是promise

解决了回调地狱模式,将异步API的结果作为返回值拿到函数外部。

二、写法

 function test(){
 return new Promise((resolve,reject)=>{
     setTimeout(()=>{
     if(true){
       resolve('成功')//成功执行了某种API后将结果传出去
}else{
   reject('失败')//失败后将结果传出去
}

},2000)
 
})
 }
 //test()返回一个promise对象
test().then(res=>{
      //then里面的回调函数是成功执行的参数,就是上面的成功
      //.then前面必须是promise对象
      //要是这里return 可以在后面继续.then()
      //.tnen()里可以写两个匿名函数,第二个函数就是catch,可以省略下面的.catch()
}).catch(res=>{
      //catch里面的回调函数是失败执行的参数,就是上面的失败,没有执行失败这里就不会执行
      //.catch前面必须是promise对象
}).then(
//这个.then必须上面return 一个promise对象/或者普通值才能写
//要是return返回一个普通值,这里的res就是返回值,返回普通值上面就会返回一个默认的promise对象和async异步函数会返回一个默认的promise对象一样。
).finally(
 //无论成功还是失败都会触发,暂时不是标准。
)

三、async异步函数

将异步代码写成同步的形式,让代码不再有回调的嵌套

写法
async fuction test(){
 
}
test()//默认返回一个promise对象,
//要是显示的返回一个return 1,这时test.then(res=>{
  //res就变成了123
//})

在普通函数test前面加上一个async,test函数就变成了一个异步函数
async异步函数默认的返回值是promise对象
要是显示的return,return后面的值就是.then的参数,return替代了resolve方法。
而throw关键字后面的值,就是.catch()里的参数。
只要执行了其中一个,后面的代码将不会再执行。

四、await

await只能出现在async异步函数中
await后面只能跟promise对象,最后都是async异步函数默认返回的promise对象,不要手动写,然后显示return 一个值。
await可以暂停async异步函数的执行。
写了await后,必须等待后面的promise对象返回结果,后面的代码才能执行。

async function fn(){
  return 1 
}
async funtion test(){
   let a = await fn()//fn()返回的是一个promise对象,因为async异步函数默认的返回值是promise对象,必须等待这个对象执行完后才会执行下面的fn2,照以前fn异步函数会先不执行,先执行fn2(),a就是fn()的执行结果,就是.then()或者.catch的参数。这里用的return是成功执行,是1
  fn2()
}

async和await其实就是简写了new promise((res,rej)=>{}),不用每次手动创建一个promise对象。

五、promise对象的方法

1.Promise.all()

处理多个异步任务,所有任务执行完成才能得到结果

Promise.all([接口1,接口2,接口3]).then(res=>{
      //res也是一个数组,是这三个接口的返回值
      

})

2.Promise.race()

并发处理多个异步任务,只要有一个任务完成就能得到结果

Promise.race([接口1,接口2,接口3]).then(res=>{
      //race是只要有一个接口成功,就能执行
      //res是最快的那个接口的返回值。
      //后面接口的返回值不再获取。
      

})
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值