मेरे पास तीन फ़ंक्शन हैं जिन्हें मैं चलाने की कोशिश कर रहा हूं, पहले दो कुछ एसिंक सामग्री कर रहे हैं जिन्हें तीसरे उपयोग के लिए डेटा की आवश्यकता है। मैं चाहता हूं कि तीसरा कार्य केवल तभी आग लग जाए जब 1 और 2 दोनों किया जाता है। यह सामान्य संरचना है लेकिन अंतिम कार्य 1 और 2 खत्म होने से पहले फायरिंग कर रहा है। return d.promise();
:jquery कस्टम स्थगित फ़ंक्शन
function run() {
var data1 = {};
var data2 = {};
$.when(first(), second()).done(constructData());
function first() {
var d = new $.Deferred();
//do a bunch of stuff async
data1 = {};
d.resolve();
}
function second() {
var d = new $.Deferred();
//do a bunch of stuff async
data2 = {};
d.resolve();
}
function constructData() {
//do stuff with data1 and data2
}
}
उत्तर डेटा तुरंत
$.when(first(), second()).done(constructData);
ने निर्माण डेटा को कॉल नहीं किया, तुरंत चाल धन्यवाद! – Brian
वाह, यह नहीं पता था कि इस तरह से फ़ंक्शन को स्थगित वस्तु के अंदर लिखा जा सकता है, धन्यवाद! – Denis
@ डेनिस मुझे नहीं लगता कि यह करने का उचित तरीका है। JQuery [डॉक्स] के अनुसार (https://api.jquery.com/jquery.deferred/): 'preStart' पैरामीटर _" एक फ़ंक्शन है जिसे कन्स्ट्रक्टर रिटर्न से ठीक पहले कहा जाता है। "_। इसलिए स्थगित ऑब्जेक्ट बनने से पहले फ़ंक्शन को कॉल किया जाता है। –