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 对象
    
  • 相关阅读:
    Using Subversion and ViewCVS on Solaris 10
    Solaris开放源代码了!
    小笨霖英语笔记本(0)
    How to start CDE/JDS with xinit command
    英译汉练习:Solaris 10进入Linux领地
    UNIX/LINUX 平台可执行文件格式分析
    小笨霖英语笔记本(2)
    小笨霖英语笔记本(3)
    小笨霖英语笔记本(1)
    魔鬼城雅丹地貌
  • 原文地址:https://www.cnblogs.com/IwishIcould/p/12997078.html
Copyright © 2011-2022 走看看