নিম্নলিখিত কোডটি বিবেচনা করুন যা ক্রমিক / অনুক্রমিক পদ্ধতিতে ফাইলগুলির একটি অ্যারে পড়ে। readFilesপ্রতিশ্রুতি প্রদান করে, যা কেবল একবার সমাধান করা হয় যখন সমস্ত ফাইল ক্রমানুসারে পড়া হয়।
var readFile = function(file) {
... // Returns a promise.
};
var readFiles = function(files) {
return new Promise((resolve, reject) =>
var readSequential = function(index) {
if (index >= files.length) {
resolve();
} else {
readFile(files[index]).then(function() {
readSequential(index + 1);
}).catch(reject);
}
};
readSequential(0); // Start!
});
};
উপরের কোডটি কাজ করে, তবে জিনিসগুলি ধারাবাহিকভাবে ঘটে যাওয়ার জন্য আমার পুনরাবৃত্তি করতে পছন্দ করি না। এমন সহজ উপায় আছে যে এই কোডটি আবার লেখা যায় যাতে আমাকে আমার অদ্ভুত ব্যবহার করতে না হয়readSequential ক্রিয়াকলাপটি হয়?
মূলত আমি ব্যবহার করার চেষ্টা Promise.all, কিন্তু যে সব সৃষ্ট readFileএকই সময়ে ঘটতে, যা কল না আমি কি চাই:
var readFiles = function(files) {
return Promise.all(files.map(function(file) {
return readFile(file);
}));
};
readFileSequential()আগেই ইতিমধ্যে ফিরে এসেছে (কারণ এটি অ্যাসিঙ্ক, এটি মূল ফাংশন কল ইতিমধ্যে ফিরে আসার অনেক পরে পূর্ণ হয়)।