zoukankan      html  css  js  c++  java
  • jq中Deferred对象的使用

        var d=$.Deferred();
        //deferred下面的方法有:
        // ["resolve", "resolveWith", "reject", "rejectWith", "notify", "notifyWith",
        // "state", "always", "then", "promise", "pipe", "done", "fail", "progress"]
        console.info(Object.keys(d));
        console.info(d.pipe== d.then);//true
        console.info(d.state());//初始化pending状态
    
        //------------resolve对应的是done------------
        function fn1(){
            var def= $.Deferred();
            setTimeout(function(){
                def.resolve('成功了!');
            },1000);
            return def.promise();
        }
        fn1().done(function(data){
            console.info(data);//成功了!
        });
        //或者可以这样写
        fn1().then(function(data){ //then的参数为( fnDone, fnFail, fnProgress)
            console.info(data);//成功了!
        });
    
        //------------reject对应的是fail------------
        function fn2(){
            var def= $.Deferred();
            setTimeout(function(){
                def.reject('失败了!');
            },1000);
            return def.promise();
        }
        fn2().fail(function(data){
            console.info(data);//失败了!
        });
        //或者可以这样写
        fn2().then(function(data){ //then的参数为( fnDone, fnFail, fnProgress)
            //不会走
        },function(data){
            console.info(data);
        });
    
        //------------notify对应的是progress------------
        function fn3(){
            var def= $.Deferred();
            setTimeout(function(){
                def.notify('传递给下一步回调的通知!');
            },1000);
            return def.promise();
        }
        fn3().progress(function(data){
            console.info(data);//传递给下一步回调的通知!
        });
        //或者可以这样写
        fn3().then(function(data){ //then的参数为( fnDone, fnFail, fnProgress)
            //不会走
        },function(data){
            //不会走
        },function(data){
            console.info(data);//传递给下一步回调的通知!
        });
    
        //------------always 不管成功与否都会执行回调------------
        //deferred.done( arguments ).fail( arguments );
        function fn4(){
            var def= $.Deferred();
            setTimeout(function(){
                Math.random()>0.5?def.resolve('成功!'): def.reject('失败!')
            },1000);
            return def.promise();
        }
        fn4().always(function(data){
            console.info(data);//成功!or失败!
        });
    
        //------------连续的回调依次执行------------
        /*第一异步程序*/
        function delayFn1(arg1){
            var def= $.Deferred();
            setTimeout(function(){
                var data=arg1+1;
                console.info("第一步--->",data);
                def.resolve(data);
            },1000);
            return def.promise();
        }
        /*第二个异步程序*/
        function delayFn2(arg2){
            var def= $.Deferred();
            setTimeout(function(){
                var data=arg2+1;
                def.resolve(data);
            },1000);
            return def.promise();
        }
        /*第三个异步程序*/
        function delayFn3(arg3){
            var def= $.Deferred();
            setTimeout(function(){
                var data=arg3+1;
                def.resolve(data);
            },1000);
            return def.promise();
        }
    
        delayFn1(1).then(function(data){
            console.info("第二步--->",data);
            return delayFn2(data)
        }).then(function(data){
            console.info("第三步--->",data);
            return delayFn3(data)
        }).then(function(data){
            console.info("第四步--->",data);
            alert(data);
        })
    

      

  • 相关阅读:
    CCF201604试题
    CCF201512试题
    CCF201509试题
    CCF201509试题
    CCF201503试题
    CCF201503试题
    CCF201412试题
    CCF201412试题
    CCF201409试题
    CCF201409试题
  • 原文地址:https://www.cnblogs.com/leyi/p/4498632.html
Copyright © 2011-2022 走看看