jQueryのdeferredオブジェクト使用の詳細

4073 ワード

他の人のdemoを見てみると、遅延オブジェクトがresolveされたときに実行するコードがdeferredに書かれていることがわかります.thenメソッドで実行され、deferredに書かれることがあります.doneメソッドで実行します.
これは遅延対象をよく知っている私を困惑させて、今日時間を割いて研究して、ある環境の下で、2つの方法は確かに同じ効果を実現することができることを発見しました.このような特定の環境はどうでしょうか.
まずdeferred.doneの使い方:

//   deferred  
var dtd = $.Deferred();
 
//   deferred  
dtd.resolve('finish');
//   done  
dtd.done(doneCallback [, doneCallback])
//  deferred    resolve  ,  doneCallback  
//         、         
//      deferred promise  


もう一度見てthenの使い方と特性:

//   deferred  
var dtd = $.Deferred();
 
//   deferred  
dtd.resolve('finish');
 
//   then  
deferred.then(doneFilter [, failFilter] [, progressFilter])
// then    :
//  deferred   resolve ,  doneFilter  
//  deferred   reject ,  failFilter  
//  dederred   progress ,  progressFilter  
//    :1,  deferred promise  ,   promise    (   resolve,reject      a, a   b,  b, promise done fail        b );
//    :2, then       deferred      promise
//    promise             , done,fail,then 
//   then   ,    ( one by one )
//        deferred       ,   deferred   promise 

以上の2つの方法の特性に基づいて、以下のことが分かった.deferred.thenおよびdeferred.doneメソッドは、いずれもパラメータ関数を直接受け取ることができ、最初のパラメータ関数は、deferredオブジェクトがresolve時に呼び出される.
thenメソッドは戻り値を変更できるが,戻り値を考慮せずにパラメータ関数が1つしかないことを前提として,両メソッドは確かに同様の効果を実現できる.
それに比べてdone法のほうが純粋でしょうし、then法のほうが複雑ですが、done法に完全に代わることはできません.then法を使うなら、気をつけたほうがいいです.
Deferredオブジェクトを追加する方法:

//        
var dtd = $.Deferred(); var state = dtd.state(); // deferred ,pending / resolved / rejected // deferred.always( alwaysCallback [, alwaysCallback] ); // deferred , // , dtd.promise( [obj] ); // : // promise , ( done, fail, then, always, progress, state, promise ), // Deferred ( resolve, reject, notify, resolveWith, rejectWith, nodifyWith ) // deferred , deferred.promise() dtd.resolve( [args] ) // deferred , doneCallback // doneCallback then , dtd.done( doneCallback ) // doneCallback。 // deferred // doneCallback this deferred promise // doneCallback dtd.resolveWith( context [,args] ) // deferred , doneCallback // : this ,doneCallback this ; // doneCallback this resolveWith // doneCallback // resolve , doneCallback this dtd.reject( [args] ) // deferred , failCallback // failCallback then , dtd.fail( failCallback ) // failCallback。 // deferred // failCallback this deferred promise // failCallback dtd.rejectWith(context, [args] ) // deferred , failCallback // : this ,failCallback this ; // failCallback this rejectWith // failCallback // resolve , failCallback this dtd.notify( [args] ) // deferred , progressCallback // progressCallback then 3 , deferred.progress( progressCallback ) // deferred , deferred.promise then // 。 , // deferred resolved rejected , notify ,progressCallback dtd.notifyWith(context, [args] ) // deferred , progressCallback // : this ,progressCallback this ; // progressCallback this rejectWith // progressCallback // resolve , progressCallback this // deferred resolved rejected , notifyWith ,progressCallback