असल में, Deferred.pipe()$.map() के बराबर एक असीमित है। यह इनपुट के रूप में प्रदान किए गए अन्य मूल्यों से नए मूल्यों को प्रोजेक्ट करता है, लेकिन इसका उद्देश्य निरंतरता के साथ उपयोग किया जाना है।
चलो एक उदाहरण के साथ शुरू करें जो केवल $.each()
की आवश्यकता है और एक AJAX अनुरोध जारी करता है जो एक साधारण वस्तु देता है। इस ऑब्जेक्ट की प्रत्येक प्रॉपर्टी के लिए, हम फॉर्म नियंत्रण चाहते हैं जिसका id
विशेषता संपत्ति के मूल्य पर अपना मूल्य निर्धारित करने के लिए संपत्ति की कुंजी है।हम कुछ लिख सकते हैं जैसे:
$.ajax("your/url", {
dataType: "json"
}).done(function(data) {
$.each(data, function(key, value) {
$("#" + key).val(value);
});
});
अब मान लें कि हम फॉर्म नियंत्रण को अपडेट करने से पहले मूल्यों पर कुछ फ़ंक्शन लागू करना चाहते हैं। हम चाहते हैं कि स्थानीय स्तर पर, हम केवल लिखने के लिए क्या है, तो:
$.ajax("your/url", {
dataType: "json"
}).done(function(data) {
$.each(data, function(key, value) {
// doSomethingWith() projects values synchronously, as map() does.
$("#" + key).val(doSomethingWith(value));
});
});
लेकिन क्या होता doSomethingWith()
कार्यान्वित करता है, तो है नहीं क्लाइंट साइड, लेकिन किसी अन्य वेब सेवा के माध्यम से सर्वर साइड? उस स्थिति में, हम दूसरे AJAX अनुरोध में नियंत्रण प्रवाह को श्रृंखलाबद्ध करना चाहते हैं, और दूसरा अनुरोध लौटाए जाने पर केवल फॉर्म नियंत्रण अपडेट करें।
$.ajax("your/url", {
dataType: "json"
}).pipe(function(theOriginalData) {
return $.ajax("your/web/service/doSomethingWith", {
data: theOriginalData,
dataType: "json"
});
}).done(function(theFinalData) {
$.each(theFinalData, function(key, value) {
$("#" + key).val(value);
});
});
क्या आपने http://api.jquery.com/deferred.pipe/ चेक किया है? – Armatus
हाँ मेरे पास है। मैंने वहां से शुरू किया। – Diego
ध्यान दें कि 'deferred.pipe' और' deferred.when' v1.8 के बराबर हैं (देखें http://stackoverflow.com/questions/12011925/pipe-and-then-documentation-vs-reality-in-jquery- 1-8) – tokland