यह उदाहरण जावास्क्रिप्ट है, क्योंकि वहीं मैं कॉलबैक का उपयोग कर रहा हूं। मैं समझना चाहता हूं कि वे निम्न स्तर पर कैसे काम करते हैं।कॉलबैक हमेशा असीमित हैं?
नीचे दिए गए उदाहरण में, मैं उम्मीद करता हूं कि सबकुछ क्रम में हो और "चरण 3" और "चरण 4" से पहले "वापस कॉल करना" हो। यह मुझे समझ में आता है, क्योंकि निष्पादन के एक धागे पर सबकुछ किया जाता है। कोई चालबाजी नहीं है। एकमात्र चीज जो विशेष प्रकार की है वह यह है कि आपने किसी फ़ंक्शन को किसी अन्य फ़ंक्शन में पास कर दिया है।
function main() {
console.log("step 1");
console.log("step 2");
doSomething(myCallBack);
console.log("step 4");
}
function doSomething(f) {
accessTheDatabase(); // this could take a while
console.log("step 3");
f(); // done - now call back
}
function myCallBack() {
console.log("calling back!");
}
आप कैसे doSomething
अतुल्यकालिक ताकि "चरण 4" से पहले क्रियान्वित किया जा सकता है, या के साथ, "चरण 3" समानांतर में होगा?
मुझे लगता है कि अगर doSomething
किसी भी तरह से असीमित रूप से कहा जाता है, तो यह एक अलग धागे पर होना होगा, नहीं? और यदि ऐसा है, तो जब यह खत्म हो जाता है और फिर myCallBack
पर कॉल करता है, कॉलबैक दूसरे धागे पर या मुख्य धागे पर होता है? यदि यह मुख्य धागे पर होता है, तो दूसरे थ्रेड को कॉलबैक फ़ंक्शन में पॉइंटर की आवश्यकता क्यों होती है? इंटर-थ्रेड कॉल कैसे काम करता है?
मुझे लगता है कि यह एक ब्राउज़र में नहीं चल रहा है, है ना? क्योंकि ब्राउज़र में, कोई भी AJAX कॉल अनिवार्य रूप से असीमित है ... –
@Dean, सभी XHR अनुरोधों में से पहला सिंक्रोनस (अनुरोध पैरामीटर के आधार पर) द्वारा किया जा सकता है। दूसरा, यदि आप प्रश्न पढ़ते हैं (और इसके उदाहरण कोड को देखते हैं), यह अजाक्स के बारे में नहीं है। – eyelidlessness
@ डीन यह ब्राउज़र में चल रहा है या नहीं। मुझे यह पता लगाने में सबसे अधिक दिलचस्पी है कि क्या कॉलबैक फ़ंक्शन मुख्य थ्रेड या दूसरे थ्रेड पर निष्पादित किया गया है जो कॉलबैक फ़ंक्शन पॉइंटर को पैरामीटर के रूप में पारित किया गया था। –