What and how jQuery AJAX deferred Function works?

ये  एक  Constructor Function है जो Chainable Utility Object के रूप  में एक  Deferred Object Return करता है। इस Object के साथ हमें कुछ Methods प्राप्त होते हैं, जिनका प्रयोग करके हम इस Object के Callback Queues में Multiple Callback Functions को Register कर सकते हैं, Callback Queues को Invoke कर सकते हैं और किसी भी Synchronous ये  Asynchronous Callback Function के Success ये  Failure State को अन्‍य  Callback Function के लिए Relay कर सकता है। इस Function का  Syntax निम्नानुसार होता है:

jQuery.Deferred( [beforeStart] )

इस Function में Pass किया जाने वाला beforeStart Argument एक  Callback Function Object होता है, जो कि स्वयं Deferred Type का Object होता है और ये  Deferred Function Object, jQuery.Deferred() Constructor के Return होने से Just पहले Call होता है।

jQuery.Deferred() Function एक  नया Deferred Object Create करता है जबकि नया Deferred Object Create करने के लिए new Operator को Use करना Compulsory नहीं है।

इस Method में हम एक  Optional Callback Function को Argument की तरह Pass कर सकते हैं और ये  Callback Function, jQuery.Deferred() Constructor के Return होने से Just पहले Call होता है।

साथ ही ये  Callback Function, Return होने वाले Deferred Object में this Object तथा पहले Returned Deferred Object के पहले Function Argument दोनों की तरह Pass होता है।

जबकि Call होने वाला Function deferred.then() Function का प्रयोग करके नए  Callback Functions को jQuery.Deferred() Function द्वारा Returned Deferred Object में Add कर सकता है।

Promise Objects को jQuery.Deferred() Function का प्रयोग करके Create किया जाता है। हर jQuery Promise एक  Deferred ¼बाद में Execute होने वाला½ Object होता है।

jQuery.Deferred() Constructor द्वारा Return होने वाला Deferred Object, Return होते ही Pending State में होता है तथा इस Returned Object के साथ deferred.then(), deferred.always(), deferred.done() ये  deferred.fail() Functions का प्रयोग करके अन्‍य  Callback Functions को Deferred Object के Callback Queue में Add किया जाता है, जो जरूरत के अनुसार बाद में Execute होते हैं।

deferred.resolve() ये  deferred.resolveWith() Transitions को Call करने पर Deferred Object Resolved State में पहुंच जाता है और जिस किसी भी Callback Function को doneCallbacks के साथ Specify किया गया होता है, वह तुरन्त Execute हो जाता है।

जबकि deferred.reject() ये  deferred.rejectWith() Transitions को Call करने पर Deferred Object Rejected State में पहुंच जाता है और जिस किसी भी Callback Function को failCallbacks के साथ Specify किया गया होता है, वह तुरन्त Execute हो जाता है।

जब एक  बार Deferred Object Resolved या Rejected State में पहुंच जाता है, तो वह Object फिर उसी स्थिति में बना रहता है। हालांकि हम इस Object के साथ और Callback Functions को Add कर सकते हैं।

Deferred Object एक  ऐसा Promise Object होता है, जिसके साथ कुछ Methods Exist होते हैं और ये  Methods, उस Deferred Object के Owner को ये  सुविधा देते हैं कि वह जरूरत के अनुसार बाद में उस Deferred Promise Object को Resolve या Reject कर सके।

सभी अन्‍य  Promises, Deferred Object की Read-Only Copy ही होते हैं, जिनके बारे में हम आगे जानेंगे। Deferred Object Create करने के लिए हमें jQuery.Deferred() Constructor Function का प्रयोग करना होता है। जैसे:

var deferred = new $.Deferred();

deferred.state();       // “pending
deferred.resolve();
deferred.state();       // “resolved
deferred.reject();          // no effect, because the Promise was already resolved

हम jQuery Library के jQuery.promise() Function का प्रयोग करके एक  Pure Promise भी प्राप्त कर सकते हैं। जब हम ऐसा करते हैं, तब दोनों ही प्रकार के Deferred का Result Identical ही होता है, लेकिन jQuery.promise() Function द्वारा Create होने वाले Deferred Object के साथ resolve()reject() Methods Available नहीं होते।

var deferred = new $.Deferred();
var promise = deferred.promise();

promise.state();       // “pending”
deferred.reject();
promise.state();       // “rejected”

jQuery Library में promise() Method मूल रूप  से केवल Encapsulation के लिए ही Exist है। यानी यदि हम किसी Function से किसी Deferred को Return करते हैं, तो इस Returned Deferred को Caller द्वारा Resolve या Reject किया जा सकता है। लेकिन यदि हम उसी Deferred से सम्बंधित केवल एक  Pure Promise को Return करते हैं, तो Caller इस Pure Promise के साथ किसी Callback Function को Attach कर सकता है अथवा केवल इसकी State (स्थिति) Read कर सकता है।

सामान्‍यत: jQuery इस Approach को उस समय स्वयं Use करते हुए Pure Promises Return करता है, जब हम AJAX Methods को Use करते हैं। जैसे:

var gettingProducts = jQuery.get(“/products”);

gettingProducts.state();   // “pending”
gettingProducts.resolve;         // undefined

jQuery.Deferred() Function हमें कई ऐसे Advance तरीके Provide करता है जिनके माध्‍यम से हम विभिन्न प्रकार की स्थितियों में विभिन्न प्रकार के Callback Functions को Invoke कर सकते है।

jQuery.Deferred() Object हमें कई Callback Functions को Execution के लिए Queued करने तथा किसी Specific Situation पर किसी Specific Queued Callback Function को Invoke करने की सुविधा देता है, फिर भले ही उस Queue में Stored अन्‍य  Callback Functions पहले ही Execute क्यों न हो चुके हों।

jQuery का Deferred Object वास्तव में CommonJS Promises/A Design पर आधारित है। Deferred को समझने का एक  तरीका ये  है कि हम इसे Chaining-Aware Function Wrapper की तरह मान लें।

deferred.then(), deferred.always(), deferred.done()deferred.fail() Methods उन Functions को Specify करते हैं, जो Call होते हैं और deferred.resolve(args) ये  deferred.reject(args) उन Methods को हमारे द्वारा Supplied Arguments के साथ Call करते हैं।

जब एक  बार Deferred Resolve या Reject हो जाते हैं, तो ये  फिर हमेंशा के लिए उसी स्थिति में रहते हैं। इसलिए यदि हम इन्हें फिर से Call करें, तो दुबारा की गई Calls Ignore हो जाती हैं। यदि हम deferred.then() द्वारा Deferred Object के साथ और Callback Functions को Queue में Add करें, जबकि Deferred Object Resolve हो चुका हो, तो Deferred Object के Resolve हो जाने के बाद Add किए गए Callback Functions तुरन्त Execute हो जाते हैं।

ज्यादातर परिस्थितियों में, जहां jQuery API Call किसी Deferred Object ये  jQuery.ajax() ये  jQuery.when() Functions द्वारा Deferred-Compatible Object Return करता है, में हमें Callback Functions को Queue में Add करने के लिए, केवल deferred.then() deferred.done()deferred.fail() Methods को ही Use करने की जरूरत पडती है। जबकि वह API Call, जिसने Deferred Object को Create किया है, Internally deferred.resolve() ये  deferred.reject() Functions को Operation Perform होने के किसी Specific Point पर स्वयं Call कर लेता है।

jQuery in Hindiये Article इस वेबसाईट पर Selling हेतु उपलब्‍ध EBook jQuery in Hindi से लिया गया है। इसलिए यदि ये Article आपके लिए उपयोगी रहा, तो निश्चित रूप से ये पुस्तक भी आपके लिए काफी उपयोगी साबित होगी। 

jQuery in Hindi | Page:711 | Format: PDF

BUY NOW GET DEMO REVIEWS