jQueryのdeferredオブジェクト使用の詳細
4073 ワード
他の人のdemoを見てみると、遅延オブジェクトがresolveされたときに実行するコードがdeferredに書かれていることがわかります.thenメソッドで実行され、deferredに書かれることがあります.doneメソッドで実行します.
これは遅延対象をよく知っている私を困惑させて、今日時間を割いて研究して、ある環境の下で、2つの方法は確かに同じ効果を実現することができることを発見しました.このような特定の環境はどうでしょうか.
まずdeferred.doneの使い方:
もう一度見てthenの使い方と特性:
以上の2つの方法の特性に基づいて、以下のことが分かった.
thenメソッドは戻り値を変更できるが,戻り値を考慮せずにパラメータ関数が1つしかないことを前提として,両メソッドは確かに同様の効果を実現できる.
それに比べてdone法のほうが純粋でしょうし、then法のほうが複雑ですが、done法に完全に代わることはできません.then法を使うなら、気をつけたほうがいいです.
Deferredオブジェクトを追加する方法:
これは遅延対象をよく知っている私を困惑させて、今日時間を割いて研究して、ある環境の下で、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