zoukankan      html  css  js  c++  java
  • Promise

    <!DOCTYPE HTML> 
    <html> 
        <head>     
            <meta charset="UTF-8" /> 
            <title>UBR</title>
            <meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0;" name="viewport"/>
            <meta content="telephone=no" name="format-detection"/>
            <script src="jquery-1.9.1.js"></script>
    </head> 
    <body>
        <script>
    
        $(function() {
            /* common code */
            function doneCallBack(value) {
                console.log(value);
            }
    
            function failCallBack(error) {
                console.log(error);
            }
    
            function failCallStatus(status) {
                console.log(status);
            }
    
            /* wait lists */
            function waitA() {
                var def = $.Deferred();
                setTimeout(function() {
                    def.resolve("已完成A");
                    //def.reject("拒绝了A");
                    console.log("已完成A");
                }, 2000);
                return def.promise();
            }
    
            function waitB() {
                var def = $.Deferred();
                setTimeout(function() {
                    def.resolve("已完成B");
                    console.log("已完成B");
                }, 2000);
    
                return def.promise();
            }
    
            function waitC() {
                var def = $.Deferred();
                setTimeout(function() {
                    def.resolve("已完成C");
                    console.log("已完成C");
                }, 2000);
    
                return def.promise();
            }
    
            function waitD() {
                var def = $.Deferred();
                setTimeout(function() {
                    def.resolve("已完成D");
                    console.log("已完成D");
                }, 2000);
    
                return def.promise();
            }
    
            function waitE() {
                var def = $.Deferred();
                setTimeout(function() {
                    def.reject("已拒绝了E");
                    console.log("已完成E");
                }, 2000);
    
                return def.promise();
            }
    
            function waitF() {
                var def = $.Deferred();
                setTimeout(function() {
                    def.resolve("已完成F");
                    console.log("已完成F");
                }, 2000);
    
                return def.promise();
            }
    
            waitA()
                .then(waitB, failCallBack, failCallStatus)
                .then(waitC, failCallBack, failCallStatus)
                .then(waitD, failCallBack, failCallStatus)
                .then(waitE, failCallBack, failCallStatus)
                .then(waitF, failCallBack, failCallStatus);
    
    /**
    Promise/A+规范:
    1、一个promise可能有三种状态:
    等待(pending)、已完成(fulfilled)、已拒绝(rejected)
    2、一个promise的状态只可能从“等待”转到“完成”态或者“拒绝”态,
    不能逆向转换,同时“完成”态和“拒绝”态不能相互转换
    3、promise必须实现then方法(可以说,then就是promise的核心),
    而且then必须返回一个promise,同一个promise的then可以调用多次,
    并且回调的执行顺序跟它们被定义时的顺序一致
    4、then方法接受两个参数,第一个参数是成功时的回调,在promise由“等待”态转换到“完成”态时调用,另一个是失败时的回调,在promise由“等待”态转换到“拒绝”态时调用。
    同时,then可以接受另一个promise传入,也接受一个“类then”的对象或方法,即thenable对象。
    *
    */
    
        })
        </script>
        
    </body>
    </html>
    <!DOCTYPE HTML> 
    <html> 
        <head>     
            <meta charset="UTF-8" /> 
            <title>UBR</title>
            <meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0;" name="viewport"/>
            <meta content="telephone=no" name="format-detection"/>
            <script src="jquery-1.9.1.js"></script>
    </head> 
    <body>
        <script>
    
        $(function() {
            function asyncEvent() {
              var dfd = new jQuery.Deferred();
              var t1 = Math.floor( 400 + Math.random() * 2000 );
              var t2 = Math.floor( 400 + Math.random() * 2000 );
              // Resolve after a random interval
              setTimeout(function() {
                  console.log("成功的回调用时", t1);
                dfd.resolve( "hurray" );
              }, t1 );
             
              // Reject after a random interval
              setTimeout(function() {
                  console.log("失败的回调用时", t2);
                dfd.reject( "sorry" );
              }, t2 );
             
              // Show a "working..." message every half-second
              setTimeout(function working() {
                if ( dfd.state() === "pending" ) {
                  dfd.notify( "working... " );
                  setTimeout( working, 500 );
                }
              }, 1 );
             
              // Return the Promise so caller can't change the Deferred
              return dfd.promise();
            }
             
            // Attach a done, fail, and progress handler for the asyncEvent
            $.when( asyncEvent() ).then(
              function( status ) {
                console.log( status + ", things are going well" );
              },
              function( status ) {
                console.log( status + ", you fail this time" );
              },
              function( status ) {
                $( "body" ).append( status );
              }
            );
    
    
        })
        </script>
        
    </body>
    </html>
  • 相关阅读:
    java lambda表达式学习笔记
    一个奇妙的java坑:Long 类型的比较
    要不要冗余字段
    mysql找回密码
    mysql创建触发器
    【转】Java 8十个lambda表达式案例
    ThreadLocal类学习笔记
    mybatis generator使用总结
    【转】Java 项目UML反向工程转化工具
    PostMan做接口自动化测试
  • 原文地址:https://www.cnblogs.com/zhoulingfeng/p/3888764.html
Copyright © 2011-2022 走看看