zoukankan      html  css  js  c++  java
  • 小结:ES7——async和await初识

    一、async

      async其实是ES7才有有的关键字,async的意思是异步,顾名思义是有关异步的操作

      async用于声明一个函数是异步的。

      通常情况下async、await都是跟随promise一起使用,因为async返回值都是一个promise对象,async适用于任何类型的函数上

    二、基本使用

      使用async其实很简单,只需要在函数前面加一个async即可,这个函数的返回值是一个promise

    //用来声明一个函数是异步的
    async function fn(){
        return 123;
    }
    
    //返回值是一个promise
    console.log(fn())
    
    /*
    控制台输出
    
    Promise
        __proto__: Promise
        [[PromiseStatus]]: "resolved"
        [[PromiseValue]]: 123
        
    1111
    2222
    
    */
    
    //可以通过.then拿到返回值
    fn().then((data)=>{
        console.log(data);//123
    })
    

    三、await

      await关键字不能够单独使用,必须在async中进行使用
      await等待异步执行返回结果后才会执行下面的代码,其实await就是阻止主函数的运行

    function fn(){
        return new Promise((resolve)=>{
            setTimeout(()=>{
                   console.log(1111);
                   resolve()
            },2000)
        })
        
    }
    
    
    async function fn1(){
        await fn();
        setTimeout(()=>{
               console.log(2222);
        },1000)
    }
    
    fn1()
    /*
    控制台输出
    
    Promise
        __proto__: Promise
        [[PromiseStatus]]: "resolved"
        [[PromiseValue]]: undefined
        
    1111
    2222
    
    */
    

    四、如何实现多个异步同步执行

    function fn(){
        return new Promise((resolve)=>{
            setTimeout(()=>{
                   console.log(1111);
                   resolve()
            },3000)
        })
        
    }
    
    
    function fn1(){
        return new Promise((resolve)=>{
            setTimeout(()=>{
                   console.log(2222);
                   resolve()
            },2000)
        })
    }
    
    function fn2(){
        return new Promise((resolve)=>{
            setTimeout(()=>{
                   console.log(3333);
                   resolve()
            },1000)
        })
    }
    
    async function fn3(){
        await fn();
        await fn1();
        await fn2();
    }
    
    fn3()
    
    /*
    控制台输出
    
    Promise
        __proto__: Promise
        [[PromiseStatus]]: "resolved"
        [[PromiseValue]]: undefined
        
    1111
    2222
    3333
    */
    

    五、总结

    async函数完全可以看作多个异步操作,包装成的一个 Promise 对象,而await命令就是内部then命令的语法糖。

      因此如果需要实现多个异步同步执行必须每次await后都返回一个新的promise

  • 相关阅读:
    把本地的jar包安装到maven库中
    mybatis 查询
    freemarker
    python——线程相关
    【python-sql】sql操作时遇到的坑
    专项测试——移动app安装包检测
    【Android端 adb相关】adb相关总结
    for 语句
    Python2.x与3​​.x版本区别
    Python 运算符
  • 原文地址:https://www.cnblogs.com/missme-lina/p/10452051.html
Copyright © 2011-2022 走看看