async和await的用法 非常好用

已被阅读 995 次 | 文章分类:javascript | 2021-02-12 13:56

下面文章有两块内容,第一 async和await关键词存在的意义及使用方式 第二 axync和await的返回值是什么;小编我只是带大家了解基本的使用方法;若有更深入或者高级用法,大家可自行搜索;

一 async和await存在的意义及使用方式

promise对象最大的一个优点是可以将异步函数同步化,即利用一个链式执行函数 then;可以实现将多个异步串联同步执行,执行一个异步后(为了获取结果后接着使用)再执行下一个异步;但是then是把双刃剑;如果链式执行次数不多,比如有两三个等,可以接受;如果有多个那代码太难维护了;像下面:

                                            
new Promise((resolve, reject) => {
      setTimeout(() => {
        console.log('500ms后输出 xiao');
        resolve('xiao');
      }, 500);
    })
      .then(res => {
        return new Promise((resolve, reject) => {
          setTimeout(() => {
            console.log('200ms后输出 bai');
            resolve(res + 'bai');
          });
        }, 200);
      })
      .then(res => {
        return new Promise((resolve, reject) => {
          setTimeout(() => {
            console.log('100ms后输出 gis');
            resolve(res + 'gis');
          }, 100);
        });
      })
      .then(res => {
        console.log('结果', res);
      });
                                            
                                        

/net/upload/image/20210212/f2a591cb181350d5b008a6b8b1e50e4.png

上面简单用三个then函数做介绍;可以看出promise可以将异步函数同步输出;但是无限的then函数,会导致函数维护很困难; async和await是配合使用的;await结合peomise可以将异步函数同步化;这样避免promise有过多then函数的问题;

                                            
async function test() {
      let v1 = await new Promise((resolve, reject) => {
        setTimeout(() => {
          resolve('500ms后输出 xiao');
        }, 500);
      });
      console.log(v1);
      let v2 = await new Promise((resolve, reject) => {
        setTimeout(() => {
          resolve('200ms后输出 xiaobai');
        }, 200);
      });
      console.log(v2);
      let v3 = await new Promise((resolve, reject) => {
        setTimeout(() => {
          resolve('100ms后输出 xiaobaigis');
        }, 100);
      });
      console.log(v3);
    }
    test();
                                            
                                        

/net/upload/image/20210212/8a720757cc1a23d2752908e8d44a612.png

可以看到都then函数和await作用都可以实现异步函数同步串联化;即500ms后再执行200ms,200ms后再执行100ms;但是await的方式,在多个异步的时候,会相当方便也很好维护

二 async和await的返回内容是什么

其实通过上面的例子,大家应该清楚了 await的返回值就是 resolve()函数的参数内容;参数内容可以是值类型也可以是对象等等;

                                            
async function test() {
      let v1 = await new Promise((resolve, reject) => {
        setTimeout(() => {
          resolve('500ms后输出 xiao');
        }, 500);
      });
      console.log(v1);
    }
    test();// '500ms后输出 xiao'

    async function test() {
      let v1 = await new Promise((resolve, reject) => {
        setTimeout(() => {
          let value = {
            name: 'xiaobaigis'
          };
          resolve(value);
        }, 500);
      });
      console.log(v1);
    }
    test(); //  {name: "xiaobaigis"}
                                            
                                        

async的返回值是什么呢

                                            
async function test() {
      let v1 = await new Promise((resolve, reject) => {
        setTimeout(() => {
          let value = {
            name: 'xiaobaigis'
          };
          resolve(value);
        }, 500);
      });
      console.log(v1);
    }
    console.log(test());//返回一个promise对象
                                            
                                        

/net/upload/image/20210212/1613109222(1).jpg

QQ:3410192267 | 技术支持 微信:popstarqqsmall

Copyright ©2017 xiaobaigis.com . 版权所有 鲁ICP备17027716号