zoukankan      html  css  js  c++  java
  • 让异步操作同步执行的方法详解

     下面我们看一个最简单的例子, 我的需求是要在fn1函数外面打印msg
    
            function fn1() {
                setTimeout(function () {
                    msg = '你等我一下我  3s';
                }, 3000);
            }
            fn1();
    
    那么怎么样才能在fn函数中获取到msg呢
    
    通过回调函数
      function fn1(callBack) {
                setTimeout(function () {
                    msg = '你等我一下我 3s';
                    callBack(msg);//回调
                }, 3000);
            }
    
     fn1(function (c) {
          alert(c)
     })
    
     es6
    
     fn1(c => {
         alert(c)
     })
    

    promise 将异步请求改成promise 通过.then()的方式 进行调用

    function fn1() {
        return new Promise((resolve, reject) => {
            setTimeout(() => {
                msg = '你等我一下我 3s';
                resolve(msg)
            }, 3000);
        })
    }
    
    //通过.then()的方式 进行调用
    fn1().then(res => {
        alert(res)
    })
    

    通过await 和async来处理

       function fn1() {
                return new Promise((resolve, reject) => {
                    setTimeout(() => {
                        msg = '你等我一下我 3s';
                        resolve(msg)
                    }, 3000);
                })
            }
    
            async function passpro() {
                let res = await fn1();
                alert(res)
            }
    
            passpro();
    

    async函数返回的是一个Promise对象

    如果一个函数加了async关键词,这个函数又有返回值,
    在调用这个函数时,如果函数执行成功,
    内部会调用Promise.solve()方法返回一个Promise对象.
    
    如果函数执行出现异常,
    就会调用Promise.reject()方法返回一个promise 对象
    
  • 相关阅读:
    Linux修改主机名称
    Druid监控SQL语句
    CentOS7.5搭建Hadoop分布式集群
    CentOS7.5 解决ifconfig报错
    windows 用VMware创建linux虚拟机,安装操作系统CentOS7.2
    MySQL报错this is incompatible with sql_mode=only_full_group_by
    CentOS配置Redis环境变量
    CentOS7.4搭建GitLab
    修改服务器路由策略
    Centos7 安装python3
  • 原文地址:https://www.cnblogs.com/IwishIcould/p/12997078.html
Copyright © 2011-2022 走看看