সংক্ষিপ্তসার: অ্যাসিঙ্ক্রোনাস কোড এবং কলব্যাক্স সত্ত্বেও আমার কোডটি পাঠযোগ্যযোগ্য রাখতে আমি অনুসরণ করতে পারি এমন কিছু সু-প্রতিষ্ঠিত সেরা অনুশীলনের নিদর্শন রয়েছে কি?
আমি একটি জাভাস্ক্রিপ্ট লাইব্রেরি ব্যবহার করছি যা প্রচুর পরিমাণে অ্যাসিঙ্ক্রোনালি করে এবং ভারী কলব্যাকগুলিতে নির্ভর করে। দেখে মনে হচ্ছে যে একটি সাধারণ "লোড এ, লোড বি, ..." পদ্ধতিটি এই প্যাটার্নটি ব্যবহার করে অনুসরণ করা বেশ জটিল এবং শক্ত হয়ে যায়।
আমাকে একটি (স্বীকৃত) উদাহরণ দিন। ধরা যাক যে আমি একটি রিমোট ওয়েব সার্ভার থেকে একগুচ্ছ চিত্রগুলি (অবিচ্ছিন্ন) লোড করতে চাই। সি # / অ্যাসিঙ্কে আমি এই জাতীয় কিছু লিখতাম:
disableStartButton();
foreach (myData in myRepository) {
var result = await LoadImageAsync("http://my/server/GetImage?" + myData.Id);
if (result.Success) {
myData.Image = result.Data;
} else {
write("error loading Image " + myData.Id);
return;
}
}
write("success");
enableStartButton();
কোড লেআউটটি "ইভেন্টগুলির প্রবাহ" অনুসরণ করে: প্রথমে, স্টার্ট বোতামটি অক্ষম করা হয়, তারপরে চিত্রগুলি লোড করা হয় ( await
ইউআইটি প্রতিক্রিয়াশীল থাকে তা নিশ্চিত করে) এবং তারপরে আবার স্টার্ট বোতামটি সক্ষম করা হয়।
জাভাস্ক্রিপ্টে, কলব্যাকগুলি ব্যবহার করে, আমি এটি নিয়ে এসেছি:
disableStartButton();
var count = myRepository.length;
function loadImage(i) {
if (i >= count) {
write("success");
enableStartButton();
return;
}
myData = myRepository[i];
LoadImageAsync("http://my/server/GetImage?" + myData.Id,
function(success, data) {
if (success) {
myData.Image = data;
} else {
write("error loading image " + myData.Id);
return;
}
loadImage(i+1);
}
);
}
loadImage(0);
আমি মনে করি যে ত্রুটিগুলি সুস্পষ্ট: আমাকে লুপটিকে একটি পুনরাবৃত্ত কলের মধ্যে পুনরায় কাজ করতে হয়েছিল, শেষ পর্যন্ত কার্যকর করা হবে বলে মনে করা কোডটি ফাংশনের মাঝখানে কোথাও রয়েছে, ডাউনলোড ( loadImage(0)
) ডাউনলোড শুরু করার কোডটি খুব নীচে রয়েছে, এবং এটি পড়তে এবং অনুসরণ করা সাধারণত কঠিন। এটি কুৎসিত এবং আমি এটি পছন্দ করি না।
আমি নিশ্চিত যে আমি এই সমস্যার মুখোমুখি হওয়া প্রথম ব্যক্তি নই, সুতরাং আমার প্রশ্নটি: অ্যাসিঙ্ক্রোনাস কোড এবং কলব্যাক্স সত্ত্বেও আমার কোডটি পাঠযোগ্য রাখার জন্য আমি কি কিছু সু-প্রতিষ্ঠিত সেরা অনুশীলনের ধরণগুলি অনুসরণ করতে পারি?
LoadImageAsync
আসলে Ext.Ajax.request
সেঞ্চা টাচের কল ।
async.waterfall
আপনার উত্তর।