क्या कोई अन्य फ़ंक्शन पूरा होने के बाद फ़ंक्शन चलाने का कोई तरीका है? उदाहरण के लिए:jquery सिंक्रोनस फ़ंक्शंस
doSomething();
doSomethingElse();
मैं केवल DoSomething पूर्ण होने के बाद doSomethingElse() चलाना चाहते हैं। क्या यह संभव है?
क्या कोई अन्य फ़ंक्शन पूरा होने के बाद फ़ंक्शन चलाने का कोई तरीका है? उदाहरण के लिए:jquery सिंक्रोनस फ़ंक्शंस
doSomething();
doSomethingElse();
मैं केवल DoSomething पूर्ण होने के बाद doSomethingElse() चलाना चाहते हैं। क्या यह संभव है?
अपने doSomething()
समारोह (जैसे कि एक Ajax अनुरोध बनाने के रूप में) कुछ अतुल्यकालिक रूप से कर रही है तो आप उस अतुल्यकालिक अनुरोध के लिए doSomethingElse()
कॉलबैक बनाने के लिए, बल्कि यह doSomething()
रिटर्न के बाद तुरंत अमल होने से करेंगे, तो।
मैं एक AJAX अनुरोध कर रहा हूं, इसलिए यह कॉलबैक में रखने के लिए वैध समाधान की तरह दिखता है, लेकिन मैं इसे कॉलबैक के बाहर करने की कोशिश कर रहा था। – ngreenwood6
इस स्पष्ट रूप से प्रति लागू करने के लिए कोई तरीका नहीं है, लेकिन एक विचार DoSomething() मान कि doSomethingElse() एक पैरामीटर के रूप में स्वीकार करता है:
retval = doSomething();
doSomethingElse(retval);
कि जिस तरह से कम से कम आप से किसी को रोकने के कम से कम तर्क की आपूर्ति किए बिना doSomethingElse() को कॉल करना ... बेशक, क्या वे कॉल करने से उस तर्क को प्राप्त करते हैं कुछ() एक और मुद्दा है। लेकिन यह एक शुरुआत है।
आइडिया कोड पूर्ण से उठाया गया।
मुझे नहीं लगता कि यह कुछ हल कैसे करता है। सवाल समझने का एकमात्र तरीका यह है कि अगर कुछ() कुछ अतुल्यकालिक कर रहा है। लौटने और गुजरने वाले मूल्यों का कोई प्रभाव नहीं पड़ता है जब काम पूरा हो जाता है। – Nosredna
वास्तव में आप जो कुछ भी चाहते हैं वह कर सकते हैं jQuery (कम से कम कुछ अर्थ में)। इसे थोड़ा सा हैकी माना जा सकता है लेकिन दोषपूर्ण काम करता है।
बस अपने पृष्ठ में एक तत्व शामिल करें जिसका आप किसी और चीज़ के लिए उपयोग नहीं करते हैं। जैसे कहीं एक खाली div।
<div id="syncFnHolder"></div>
और फिर अपने कार्यों + runMe
समारोह मुझे द्वारा लिखित के साथ जे एस शामिल हैं।
function doSomething() { alert("First"); }
function doSomethingElse() { alert("Second"); }
function doSomethingElseThree() { alert("Third"); }
function runMe(fn, selec) {
return function() {
fn();
setTimeout(function() {
$(selec).dequeue("syncFnQueue");
}, 1000);
}
};
var selector = "#syncFnHolder";
//add three functions to a queue
$(selector).queue("syncFnQueue", runMe(doSomething, selector));
$(selector).queue("syncFnQueue", runMe(doSomethingElse, selector));
$(selector).queue("syncFnQueue", runMe(doSomethingElseThree, selector));
//start first function in queue (FIFO) others are triggered automatically
$(selector).dequeue("syncFnQueue");
यह उन दोनों के बीच 1s और कहा, "पहले" "दूसरा" की दूरी के साथ तीन अलर्ट उत्पन्न होगा, "तीसरा"।
यदि आप कोई देरी नहीं चाहते हैं तो सेटटाइमआउट को हटा दें और बस $(selec).dequeue("syncFnQueue");
पर कॉल छोड़ दें।
यदि आपके कार्यों को पैरामीटर की आवश्यकता है उदा। doSomething(x,y,z)
आपको runMe
फ़ंक्शन को बेहतर आंशिक होने और लौटाए गए फ़ंक्शन को अलग-अलग बनाने के लिए अनुकूलित करने की आवश्यकता है। यहां जांचें या नया प्रश्न पोस्ट करें।
बहुत रोचक – gpilotino
क्यों न केवल एक जेएस ऑब्जेक्ट में अपनी कतार और डेक्यूइंग करें। एक डमी डीओएम तत्व में पॉप करने के लिए व्यर्थ लगता है। – nickytonline
? मैं jQuery के साथ ऐसा कैसे कर सकता हूं? मान लीजिए कि मैं इस दिन (02:45 पूर्वाह्न) के इस समय पर आपका क्या मतलब नहीं रख सकता हूं। – jitter
सवाल थोड़ा अस्पष्ट है।
यदि आपके कार्यों में उनके लिए असीमित बिट्स हैं, तो कॉलबैक का उपयोग करें। यही वह है जो वे हैं।
यदि, हालांकि, आप जावास्क्रिप्ट में पहलू उन्मुख प्रोग्रामिंग करना चाहते हैं, तो jQuery-aop पर एक नज़र डालें।
आप ऐसा कर सकते हैं ....
function doSomething(callback) {
// code for do some thing
// now fire off the callback
if (typeof callback === 'function') {
callback();
}
}
function doSomethingElse() {
}
doSomething(doSomethingElse);
है नहीं क्या आप पहले से ही क्या आप चाहते हैं तैनात? मुझे यहां क्या समझ नहीं आ रहा है? -1 का सामना करने के लिए –
+1। यह सवाल किसी अन्य के रूप में मान्य है। – echo
कोई भी मौका आप हमें अधिक कोड दे सकते हैं या हमें बता सकते हैं कि आप क्या करने की कोशिश कर रहे हैं? – Nosredna