Deferredオブジェクトの説明

3553 ワード

deferredオブジェクトとは
開発中、ajaxリクエストやビッグデータ処理に遭遇することが多く、リクエストされたデータや処理結果はすぐには返されません.通常、完了後の操作を実行するためにコールバックcallbackを設定する必要があります.deferred操作はjqueryまたはzeptoコールバック関数ソリューションです.時間のかかる操作の問題を解決し、それらの操作方法をよりよく制御し、統一的なインタフェースを備えています.
defferedのパラメータを紹介します
  • $.Deferred()はdeferredオブジェクトを生成します.
  • deferred.done()指定操作成功時のコールバック関数
  • deferred.fail()指定操作に失敗した場合のコールバック関数
  • deferred.promise()パラメータがない場合、新しいdeferredオブジェクトが返され、そのオブジェクトの動作状態が変更できません.パラメータを受け入れると、パラメータオブジェクトにdeferredインタフェースを配置する役割を果たします.
  • deferred.resolve()deferredオブジェクトの実行状態を手動で「完了」に変更し、done()メソッドを直ちにトリガーします.
  • deferred.reject()この方法はdeferred.resolve()は正反対で、呼び出し後にdeferredオブジェクトの実行状態を「失敗」に変更し、fail()メソッドを直ちにトリガーします.
  • $.when()は、複数の操作にコールバック関数を指定します.
  • deferred.then()は手間を省くためにdone()とfail()を合わせて書くことがあるが,これがthen()メソッドである.$.when($.ajax( "/main.html" )).then(successFunc, failureFunc ); then()に2つのパラメータがある場合、第1のパラメータはdone()メソッドのコールバック関数であり、第2のパラメータはfail()メソッドのコールバックメソッドである.then()にパラメータが1つしかない場合、done()に等しい.9.deferred.Always()この方法もコールバック関数を指定するために使用され、呼び出しがdeferredであるにかかわらず.resolve()かdeferred.reject()は、最後に常に実行されます.
  • .always( function() { alert(" !");} );```

    setTimeout

             console.log("   ");```
    
                 ,    ?                   setTimout  ,   deffered    。          ,                  。
    ``` var wait2 = function(){ var tasks = function(){  
    alert("    test!");   };  
     setTimeout(tasks,5000); }; 
    $.when(wait2()) .done(function(){ alert("  ,   !"); })  .fail(function(){ alert("   !"); }); ```
               done fail    ,  defferred       :
    ``` function wait(){ var dtd = $.Deferred(); //     Deferred   
    setTimeout(function(){ console.log("    1"); 
    dtd.resolve("1  ");//   Deferred        },100); return dtd.promise(); }; 
    wait().done(function(data){ console.log(data+"     "); });```
             
    ```var dtd1 = $.Deferred(); //     Deferred   var wait1=function(dtd){ 
    setTimeout(function(){ 
    console.log("    2"); 
    dtd1.resolve("2  ");//   Deferred        
    },100); }; 
    dtd1.promise(wait1); 
    wait1.done(function(data){ 
    console.log(data+"     "); });
    wait1(dtd1);```
    ### ajax           deffered   
    ``` $.ajax({ url: "test.html",
    success: function(){ alert("  ,   !"); }, 
    error:function(){ alert("   !"); } });```
    $.ajax()     ,  1.5.0  ,    deferred  ,        。
    ``` $.ajax("test.html") 
      .done(function(){ alert("  ,   !"); })
      .fail(function(){ alert("   !"); });  ```
    deferred       ,                。``` $.ajax("test.html")  
    .done(function(){ alert("  ,   !");} ) 
     .fail(function(){alert("   !");} ) 
     .done(function(){ alert("       !");} ) 
    .fail(function(){ alert("      !"); } )```
    deferred        ,                   ,          。
    ``` $.when($.ajax("test1.html"), 
    $.ajax("test2.html")) 
    .done(function(){ alert("  ,   !"); }) 
    .fail(function(){ alert("   !"); }); ```
    jquery 1.5.0     deffered   ,zepto  deffered           "deferred","callbacks",    zepto      , OK
    
         [    Deffered  ](http://www.ruanyifeng.com/blog/2011/08/a_detailed_explanation_of_jquery_deferred_object.html),[zepto 1.1.6 api](http://www.css88.com/doc/zeptojs_api/)