कुछ भाषाएं इस समस्या से निपटने के लिए एक विशेष भाषा निर्माण प्रदान करती हैं। उदाहरण के लिए, C# में async
है /await
कीवर्ड जो आपको कोड लिखने देते हैं जैसे कि आप सिंक्रोनस एपीआई को कॉल कर रहे थे।
जावास्क्रिप्ट नहीं है और आपको createAccount
. को श्रृंखलाबद्ध करना होगा कॉलबैक के साथ कॉल।
कुछ लोगों ने पुस्तकालय विकसित किए हैं जो इस कोड को व्यवस्थित करने में आपकी सहायता कर सकते हैं। उदाहरण के लिए async , चरण , नोड-वादा और Q
आप फाइबर का भी उपयोग कर सकते हैं पुस्तकालय, एक देशी पुस्तकालय जो फाइबर / कोरआउट के साथ जावास्क्रिप्ट रनटाइम का विस्तार करता है।
और कुछ लोगों ने async
. जैसी संरचनाओं के साथ भाषा का विस्तार किया है /await
:streamline.js
, IcedCoffeeScript
या wind.js
. उदाहरण के लिए, streamline.js (मैं लेखक हूं इसलिए मैं स्पष्ट रूप से पक्षपाती हूं) _
का उपयोग करता है एक विशेष कॉलबैक प्लेसहोल्डर के रूप में और आपको अपना उदाहरण इस प्रकार लिखने देता है:
var db = MongoClient.connect("mongodb://localhost:27017/bq", _):
var accounts = db.createCollection('accounts', _);
createAccount("bob","bob", _);
createAccount("bob","bob", _);
createAccount("bob","bob", _);
createAccount("bob","bob", _);
function createAccount(email, password, _) {
var item = accounts.findOne({"email":email}, _);
if (item === null) {
accounts.insert({"email":email, "password":password}, _);
console.log("Account " + email + " created."); }
} else {
console.log("Account already exists.")
}
}
और, अंतिम लेकिन कम से कम, नई भाषा सुविधाएँ जैसे जनरेटर और आस्थगित कार्य जावास्क्रिप्ट के भविष्य के संस्करणों के लिए चर्चा की जा रही है (जेनरेटर के ES6 में उतरने की बहुत संभावना है, आस्थगित कार्य थोड़े रुके हुए प्रतीत होते हैं)।
तो आपके पास कई विकल्प हैं:
- कॉलबैक से चिपके रहें
- सहायक पुस्तकालय का उपयोग करें
- फाइबर रनटाइम एक्सटेंशन का उपयोग करें
- भाषा एक्सटेंशन का उपयोग करें
- ES6 की प्रतीक्षा करें