जावास्क्रिप्ट में, सिंक्रोनस और एसिंक्रोनस फ़ंक्शन होते हैं।
तुल्यकालिक कार्य
जावास्क्रिप्ट में अधिकांश फ़ंक्शन सिंक्रोनस हैं। यदि आप एक पंक्ति में कई तुल्यकालिक कार्यों को कॉल करने के लिए थे
doSomething();
doSomethingElse();
doSomethingUsefulThisTime();
वे क्रम में निष्पादित करेंगे। पूरा doSomethingElse
होने तक शुरू नहीं होगा doSomething
। doSomethingUsefulThisTime
, बदले में, doSomethingElse
पूरा होने तक शुरू नहीं होगा ।
अतुल्यकालिक कार्य
अतुल्यकालिक समारोह, हालांकि, एक दूसरे के लिए इंतजार नहीं करेंगे। हमें उसी कोड नमूने को देखें जो हमारे पास था, इस बार यह मानते हुए कि फ़ंक्शन अतुल्यकालिक हैं
doSomething();
doSomethingElse();
doSomethingUsefulThisTime();
कार्यों को क्रम में शुरू किया जाएगा, लेकिन वे सभी एक ही समय में लगभग निष्पादित करेंगे। आप लगातार यह अनुमान नहीं लगा सकते हैं कि कौन सा व्यक्ति सबसे पहले समाप्त होगा: वह जो निष्पादित करने के लिए सबसे कम समय लेता है वह सबसे पहले समाप्त होगा।
लेकिन कभी-कभी, आप ऐसे कार्यों को चाहते हैं जो क्रम में निष्पादित करने के लिए अतुल्यकालिक हैं, और कभी-कभी आप ऐसे कार्यों को चाहते हैं जो अतुल्यकालिक रूप से निष्पादित करने के लिए तुल्यकालिक हैं। सौभाग्य से, क्रमशः कॉलबैक और टाइमआउट के साथ यह संभव है।
कॉलबैक
मान लेते हैं कि हमारे पास तीन अतुल्यकालिक कार्य हैं जिन्हें हम क्रम , और some_3secs_function
, में निष्पादित करना चाहते हैं ।some_5secs_function
some_8secs_function
चूंकि फ़ंक्शन जावास्क्रिप्ट में तर्क के रूप में पारित किए जा सकते हैं, आप फ़ंक्शन को पूरा होने के बाद निष्पादित करने के लिए कॉलबैक के रूप में एक फ़ंक्शन पास कर सकते हैं।
यदि हम इस तरह के कार्य बनाते हैं
function some_3secs_function(value, callback){
//do stuff
callback();
}
तब आप इस तरह से फिर कॉल कर सकते हैं:
some_3secs_function(some_value, function() {
some_5secs_function(other_value, function() {
some_8secs_function(third_value, function() {
//All three functions have completed, in order.
});
});
});
समय समाप्ति
जावास्क्रिप्ट में, आप एक निश्चित समय के बाद (मिलीसेकंड में) निष्पादित करने के लिए एक फ़ंक्शन बता सकते हैं। यह, प्रभाव में, तुल्यकालिक कार्यों को अतुल्यकालिक रूप से व्यवहार कर सकता है।
यदि हमारे पास तीन सिंक्रोनस फ़ंक्शन हैं, तो हम setTimeout
फ़ंक्शन का उपयोग करके उन्हें एसिंक्रोनस रूप से निष्पादित कर सकते हैं ।
setTimeout(doSomething, 10);
setTimeout(doSomethingElse, 10);
setTimeout(doSomethingUsefulThisTime, 10);
यह, हालांकि, थोड़ा बदसूरत है और DRY सिद्धांत [विकिपीडिया] का उल्लंघन करता है । हम फ़ंक्शन की एक सरणी और एक टाइमआउट स्वीकार करता है, जो एक समारोह बनाकर इसे थोड़ा साफ कर सकता है।
function executeAsynchronously(functions, timeout) {
for(var i = 0; i < functions.length; i++) {
setTimeout(functions[i], timeout);
}
}
इसे इस तरह कहा जा सकता है:
executeAsynchronously(
[doSomething, doSomethingElse, doSomethingUsefulThisTime], 10);
सारांश में, यदि आपके पास एसिंक्रोनस फ़ंक्शन हैं जो आप सिंक्रोनाइज़ करना चाहते हैं, तो कॉलबैक का उपयोग करें, और यदि आपके पास सिंक्रोनस फ़ंक्शन हैं जो आप एसिंक्रोनस रूप से निष्पादित करना चाहते हैं, तो टाइमआउट का उपयोग करें।