欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-05-20 19:45:33
...

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();
相关标签: ES7 es6