zoukankan      html  css  js  c++  java
  • async/wait 多个async函数嵌套

    1. 假如函数

    async function A(){
      await customFun();  
      console.log("A");  
    }

    A()会等到customFun()的函数体内所有的代码执行结束,再执行console.log("A")。  

    async function customFun() {
        console.log("customFun")
        await new Promise((res,rej)=>{
            let t = 1000;
            setTimeout(()=>{
                console.log(`setTimeout ${t}ms`);
                res(777);
        
            }
            , t);
            console.log(`promise ${t}`);
        }
        ).then((result)=>{
            console.log(`result ${result}`)
        }
        );
        console.log("f-2")
    }

    如果customFun()的函数体内使用了await,也会执行customFun()的函数await行下面所有代码,然后再返回执行。

     结果为:
    customFun
    promise 1000
    setTimeout 1000ms
    result 777
    f-2

    1.实例

    async function f() {
        await console.log("f");
        console.log("f-2")
    }
    
    async function f0() {
        console.log("f0");
        await f();
        console.log("f0-2");
    }
    
    async function f1() {
        console.log("f1")
        await f0();
        //加了await, 会等到f0()的”f0-2"输出之后再输出f1-2;没加await,
        console.log("f1-2")
    
    }
    
    async function f2() {
        console.log("f2")
        await f1();
        console.log("f2-2")
    }
    
    // f2();
    // f2
    // f1
    // f0
    // f
    // f-2
    // f0-2
    // f1-2
    // f2-2

    2. 

    console.log("start")
    async function f() {
        console.log("f")
        await new Promise((res,rej)=>{
            let t = 1000;
            setTimeout(()=>{
                console.log(`setTimeout ${t}ms`);
                res(777);
        
            }
            , t);
            console.log(`promise ${t}`);
        }
        ).then((result)=>{
            console.log(`result ${result}`)
        }
        );
        console.log("f-2")
    }
    
    async function f0() {
        console.log("f0");
        await f();  //在这儿取消await 或者加上await,分析结果。
        console.log("f0-2");
    }
    
    async function f1() {
        console.log("f1")
        await f0();
        //加了await, 会等到f0()的”f0-2"输出之后再输出f1-2;没加await,
        console.log("f1-2")
    }
    async function f2() {
        console.log("f2")
        await f1();
        console.log("f2-2")
    }
    
    f2();
    console.log("end")
  • 相关阅读:
    005 Eureka的HA机制和保护模式
    004 完善微服务信息
    003 注册微服务
    002 搭建单机的Eureka服务端
    001 项目的基础配置
    002 分支操作
    001 GIt的基本操作
    004 流程历史
    签名时出错: 未能对 binDebugapp.publishxxxx .exe 签名
    远程桌面无法复制粘贴传输文件解决办法
  • 原文地址:https://www.cnblogs.com/sunupo/p/15566652.html
Copyright © 2011-2022 走看看