फ़ंक्शन की वापसी में देरी करने के लिए मैं jQuery डिफ्रैड का सही तरीके से उपयोग कैसे कर सकता हूं जब तक कि फ़ंक्शन पूर्ण में एसिंक कॉल न हो + वापसी मूल्य प्राप्त करें?jQuery स्थगित: कार्य पूर्ण होने के दौरान एसिंक कॉल तक फ़ंक्शन की वापसी में देरी करने के लिए उपयोग करें + वापसी मूल्य प्राप्त करें
function getFields(page)
{
var dff = $.Deferred();
result = {};
$.ajax(//the async call
{
url: page,
success:
function (data)
{
//work out values for field1 & field 2 from data here
result =
{
'field1' : field1,
'field2' : field2
};
},
complete:
function()
{
dff.resolve(result); //my attempt to return the result
}
}
);
return dff.promise();
}
मैं इस {: "मान 1", "field2": "फ़ील्ड 1" "मान 2"} प्रिंट करना चाहते हैं:
यह मेरे वर्तमान कोड है
var result = getFields('http://something');
console.log(JSON.stringify(result));
हालांकि, मूल्य परिणाम एक jQuery ऑब्जेक्ट प्रतीत होता है - इसलिए मैं कुछ गलत कर रहा हूं, लेकिन क्या?
धन्यवाद!
पीएस नौसिखिया प्रश्न के लिए खेद है, मैं पहली बार स्थगित लोगों का उपयोगकर्ता हूं, इसलिए मैं अभी भी बुनियादी अवधारणाओं को समझ रहा हूं।
@ Sly_caridnal: +1 और जांच - महान स्पष्टीकरण! – bguiz
ओह, अच्छा ... लपेटना 'dff.resolve (डेटा);' एक 'सेटटाइमआउट' में धीमी AJAX कॉल अनुकरण करने का एक तेज़ और आसान तरीका है (क्योंकि मैं जो परीक्षण कर रहा हूं वह पहले या बाद में खत्म नहीं होता है दूसरा AJAX कॉल) – Izkata
वास्तव में एक तरीका है: 'getFields (पेज) 'फ़ंक्शन का रिटर्न स्टेटमेंट' रिटर्न dff.promise()। getState() == 'हल किया गया' 'बदलें, यह हल हो जाएगा या अस्वीकार होने तक रोक देगा। बेशक आप केवल वादे ऑब्जेक्ट को वापस कर सकते हैं और राज्य को कहीं और जांच सकते हैं। – shuangwhywhy