ES8中异步的终极解决方案-async await

在这里插入图片描述

1. 什么是async

ES7 中的 async / await 让多个异步 promise 协同工作起来更容易。如果要按一定顺序从多个数据库或者 API 异步获取数据,你可能会以一堆乱七八糟的 promise 和回调函数而告终。而 async / await 结构让我们能用可读性强、易维护的代码更加简洁地实现这些逻辑
async顾名思义是“异步”的意思,async用于声明一个函数是异步的。而await从字面意思上是“等待”的意思,就是用于等待异步完成。并且await只能在async函数中使用

2. 为什么要使用async

通常async、await都是跟随Promise一起使用的。async返回的都是一个Promise对象同时async适用于任何类型的函数上。这样await得到的就是一个Promise对象(如果不是Promise对象的话那async返回的是什么 就是什么;
await得到Promise对象之后就等待Promise接下来的resolve或者reject

3. 怎么使用async

案例1 :

async function testAsync() {

              const response  = await new Promise((resolve, reject) => {

                  setTimeout(resolve("this is async"),2000);

              });

              console.log(response);

};

testAsync();

async、await串行并行处理

串行:等待前面一个await执行后接着执行下一个await,以此类推

async function fun1() { 

                return new Promise((resolve, reject) => {

                    setTimeout(resolve,3000);

                });

};

async function test(){

                console.log('开始执行', new Date().toString());

                await fun1();

                console.log('结束执行', new Date().toString());

}

并行:将多个promise直接发起请求(先执行async所在函数),然后再进行await操作。

async function asyncAwait(str) {

                return await new Promise((resolve) => {

                    setTimeout(resolve(str), 1000);

                })

}

        const parallel = async () => { //并行执行

                console.time('parallel')

                const parallel1 = asyncAwait('async1');

                const parallel2 = asyncAwait('async2')

                //直接打印

                console.log(await parallel1)

                console.log(await parallel2)

                console.timeEnd('parallel');

                };

                parallel();

4. 请求失败的处理方式

使用异步请求肯定会有请求失败的情况,async返回的是一个Promise对象。既然是返回一个Promise对象的话那处理当异步请求发生错误的时候我们就要处理reject的状态了,为了保持代码的健壮性使用async、await的时候我们使用try catch来处理错误。

async function catchError() {
                try {
                    const asyncError = await new Promise((resolve, reject) => {
                        setTimeout(reject('处理异步请求失败'),2000);
                    });
                } catch (error) {
                    console.log(error);
                }
};
catchError();
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值