程序项目代做,有需求私信(小程序、网站、爬虫、电路板设计、驱动、应用程序开发、毕设疑难问题处理等)

es6之async和await

之所以去写一篇关于await和async相关的文章,主要是我经常忘记如何将它们和Promise一起搭配使用,为此单独记录一下它们的用法。

一、从字面上去理解await和async

1.1、什么是await和async

await在字面上是等待的意思,而async在字面上是异步、非同步的意思。如果你不清楚同步、异步的区别,那么我认为你有必要先去了解一下。官方给我们的使用语法是这样的:

async function(){
   [返回值] = await 表达式;
   ...  
}

如果你是首次接触await和async,看到这里,你可能会问为啥async和await是一起使用的,为什么会出现await和async,它们是用来解决什么问题的呢。我们还是从字面上去解释整个代码:

1、async操作符后面接了一个function,这说明什么,说明整个函数是异步执行的;

2、函数内部await操作符后面又接了一个表达式,这个表达式一般是一个异步操作,如果不是,则返回值本身。在实际开发中使用最多的是一个Promise对象,使用await之后这好像又是在告诉我们Promise是同步执行的,实际上的确是这样,await表达式会暂停当前async function的执行,等待Promise处理完成,如果Promise正常处理(fulfilled),其回调的resolve函数参数作为await表达式的值,继续执行async function;如果Promise处理异常(rejected),await表达式会将Promise的异常原因抛出。

1.2、为什么使用await和async

 在前端页面开发中,我们经常会去请求后端接口,比如我们想获取当前登录用户的订单列表,而我们整个步骤又细分为两次ajax请求:

1、获取当前登录用户的id;

2、如果获取到用户id后,根据用户id获取用户的订单列表;

这里就涉及到一个问题,第二次请求是依赖于用户id的,也就是说我们必须拿到用户id,才能发起第二次请求,因为获取当前登录用户id和获取订单列表的操作必须是同步执行的。如果没有await和async语法的话,我们需要使用Promise的链式调用去解决整个问题:

复制代码
//直接返回Promise
function getUserId(){
    return new Promise((resolve,reject)=>{
        userService.getUserId().then(res => {
                resolve(res.data);
            }).catch((err) => {
                reject(err);
            });
      })
}

function getOrderList(userId){
    return new Promise((resolve,reject)=>{
        userService.getOrderList({
                params: {
                    userId: userId,
                         }
            }).then(res => {
                resolve(res);
            }).catch((err) => {
                reject(err);
            });
      })
}

//执行 getUserId().then(getOrderList);
复制代码

reslove方法的参数就是要传给回调函数的参数,即resolve将运行得到的结果传出来,而then接受该参数给回调继续执行后面的,如果这个then的中的函数还会返回Promise,则会重复执行该步骤直到结束。

亲爱的读者和支持者们,自动博客加入了打赏功能,陆陆续续收到了各位老铁的打赏。在此,我想由衷地感谢每一位对我们博客的支持和打赏。你们的慷慨与支持,是我们前行的动力与源泉。

日期姓名金额
2023-09-06*源19
2023-09-11*朝科88
2023-09-21*号5
2023-09-16*真60
2023-10-26*通9.9
2023-11-04*慎0.66
2023-11-24*恩0.01
2023-12-30I*B1
2024-01-28*兴20
2024-02-01QYing20
2024-02-11*督6
2024-02-18一*x1
2024-02-20c*l18.88
2024-01-01*I5
2024-04-08*程150
2024-04-18*超20
2024-04-26.*V30
2024-05-08D*W5
2024-05-29*辉20
2024-05-30*雄10
2024-06-08*:10
2024-06-23小狮子666
2024-06-28*s6.66
2024-06-29*炼1
2024-06-30*!1
2024-07-08*方20
2024-07-18A*16.66
2024-07-31*北12
2024-08-13*基1
2024-08-23n*s2
2024-09-02*源50
2024-09-04*J2
2024-09-06*强8.8
2024-09-09*波1
2024-09-10*口1
2024-09-10*波1
2024-09-12*波10
2024-09-18*明1.68
2024-09-26B*h10
2024-09-3010
2024-10-02M*i1
2024-10-14*朋10
2024-10-22*海10
2024-10-23*南10
2024-10-26*节6.66
2024-10-27*o5
2024-10-28W*F6.66
2024-10-29R*n6.66
2024-11-02*球6
2024-11-021*鑫6.66
2024-11-25*沙5
2024-11-29C*n2.88
posted @   大奥特曼打小怪兽  阅读(406)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
如果有任何技术小问题,欢迎大家交流沟通,共同进步

公告 & 打赏

>>

欢迎打赏支持我 ^_^

最新公告

程序项目代做,有需求私信(小程序、网站、爬虫、电路板设计、驱动、应用程序开发、毕设疑难问题处理等)。

了解更多

点击右上角即可分享
微信分享提示