zoukankan      html  css  js  c++  java
  • async和await的用法




      function fn(){
          return "aa";      
      }
      console.log(fn())
    // 如果直接写个函数return一个值,那么打印的肯定就是aa
        async function fn(){
            return "aa";
        }
        console.log(fn())
    // 使用async就是在函数前面加一个async,这样打印出来的就是一个promise对象,而不是之前那个具体的值

        async function fn(){
            return "aa";
        }
        console.log(fn())
    
        fn().then(function(data){
            console.log(data)  // aa
        });
    // 如果想要获取fn()的值,就要用then()方法去获取

    awiat必须在使用async的情况下才能使用,它的作用是阻断主函数的执行,等待异步执行的结果返回后才会向下继续执行。

        function fn(){
            return new Promise((resolve)=>{
                setTimeout(()=>{
                    console.log(1111)
                    resolve();
                },2000);
            });
        }
    
        async function fn1(){
            await fn();
            setTimeout(()=>{
                console.log(2222);
            },1000);
        }
        fn1();
    // 执行结果:2秒后打印1111(因为await的阻断作用,它会先执行fn函数),再过1秒打印2222(执行完fn函数后,fn函数要有reslove()才能继续向下执行)。

    多个异步同时执行

        function fn(){
            return new Promise((resolve)=>{
                setTimeout(()=>{
                    console.log(1111)
                    resolve();
                },3000);
            });
        }
        function fn1(){
            return new Promise((resolve)=>{
                setTimeout(()=>{
                    console.log(2222)
                    resolve()
                },1000);
            });
        }
        function fn2(){
            return new Promise((resolve)=>{
                setTimeout(() => {
                    console.log(3333)
                    resolve()  
                },1000);
            });
        }
    
        async function fn3(){
            await fn();
            await fn1();
            await fn2();
            console.log(4444)
        }
        fn3();
    // 执行结果:3秒后打印1111(因为定时器设置为3秒),再过1秒打印2222(受await阻断影响,必须要在fn()执行完后才能执行,同时如果fn()没有返回结果,就是说没有reslove()的话,那么下面的代码将不会执行),
    // 再过1秒打印3333和4444(打印4444是瞬间执行,如果fn2()没有reslove(),则不会打印4444)。

     

  • 相关阅读:
    vue axios前端跨域问题
    DDD的神奇
    开源电子书《WoW C#》
    15项架构原则
    龙芯发布.NET 6.0.100开发者测试版
    国内 Mono 相关文章汇总
    Kubernetes应用程序开发认证(CKAD) 经验分享
    [LeetCode] 1281. Subtract the Product and Sum of Digits of an Integer 整数的各位积和之差
    我(webabcd)的文章索引
    上周热点回顾(1.31.9)
  • 原文地址:https://www.cnblogs.com/wuqilang/p/11869308.html
Copyright © 2011-2022 走看看