Go to comments

jQuery 工具方法"当"(when)

$.when() 方法是和 $.Deferred() 挂钩的

参数可以是一个或多个延迟对象

返回值是 promise 对象


when 返回延迟对象,后面可以调用 then,

1. 三个延迟对象全部返回 resolve 触发 done

2. 三个延迟对象有一个返回 reject 触发 fail

$.when(df1, df2, df3)
  .then(function(){
    // done 返回注册成功的回调
  },function(){
    // fail 返回注册失败的回调
  });


应用场景

发送三个 ajax 请求,有一个失败的都不行的时候用when,因为$.ajax返回Deferred延迟对象


例子

三个 createScore 返回的都是延迟对象

一个失败返回失败,

三个成功返回成功

<script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script>
<script>

  $.when(createScore1(), createScore2(), createScore3())
    .then(function(ms){
      console.log('oh yeah I do it. ' + ms);
    },function(ms){
      console.log('sorry, I am loser. ' + ms);
    },function(ms){
      console.log('waiting... ' + ms);
    });

  function createScore1(){
    var df = $.Deferred();
    setInterval(function (){
      var score = Math.random() * 100;
      if(score > 50){
        df.resolve('通过了');
      }else if(score < 40){
        df.reject('今天不要在考了');
      }else{
        df.notify('继续加油');
      }
      
    }, 1000);
    return df.promise();
  }

  function createScore2(){
    var df = $.Deferred();
    setInterval(function (){
      var score = Math.random() * 100;
      if(score > 50){
        df.resolve('通过了');
      }else if(score < 40){
        df.reject('今天不要在考了');
      }else{
        df.notify('继续加油');
      }
      
    }, 1000);
    return df.promise();
  }

  function createScore3(){
    var df = $.Deferred();
    setInterval(function (){
      var score = Math.random() * 100;
      if(score > 50){
        df.resolve('通过了');
      }else if(score < 40){
        df.reject('今天不要在考了');
      }else{
        df.notify('继续加油');
      }
      
    }, 1000);
    return df.promise();
  }

</script>



Leave a comment 0 Comments.

Leave a Reply

换一张