@ বার্গির প্রতিক্রিয়া পছন্দ করুন তবে একটি পার্থক্য সহ।
Promise.all
কেউ যদি প্রত্যাখ্যান হয় তবে সমস্ত প্রতিশ্রুতিগুলি প্রত্যাখ্যান করে।
সুতরাং, একটি পুনরাবৃত্তি ব্যবহার করুন।
const readFilesQueue = async (files, index = 0) {
const contents = await fs.readFile(files[index], 'utf8')
console.log(contents)
return files.length <= index
? readFilesQueue(files, ++index)
: files
}
const printFiles async = () => {
const files = await getFilePaths();
const printContents = await readFilesQueue(files)
return printContents
}
printFiles()
পুনশ্চ
readFilesQueue
printFiles
পার্শ্ব প্রতিক্রিয়া * প্রবর্তিত কারণ বাইরেconsole.log
, এটি উপহাস করা, পরীক্ষা করা এবং গুপ্তচরবৃত্তি করা ভাল, সুতরাং সামগ্রীটি (সিডনোট) ফেরত দেয় এমন ফাংশন রাখা ভাল নয়।
সুতরাং, কোডটি কেবল এ দ্বারা ডিজাইন করা যেতে পারে: তিনটি পৃথক ফাংশন যা "খাঁটি" ** এবং কোনও পার্শ্ব প্রতিক্রিয়া প্রবর্তন করে না, পুরো তালিকাটি প্রক্রিয়া করে এবং ব্যর্থ কেসগুলি পরিচালনা করতে সহজেই সংশোধন করা যায়।
const files = await getFilesPath()
const printFile = async (file) => {
const content = await fs.readFile(file, 'utf8')
console.log(content)
}
const readFiles = async = (files, index = 0) => {
await printFile(files[index])
return files.lengh <= index
? readFiles(files, ++index)
: files
}
readFiles(files)
ভবিষ্যতের সম্পাদনা / বর্তমান অবস্থা
নোড শীর্ষ স্তরের অপেক্ষার সমর্থন করে (এটিতে এখনও একটি প্লাগইন নেই, সম্প্রীতির পতাকাগুলির মাধ্যমে এটি সক্ষম হবে না) এটি দুর্দান্ত তবে একটি সমস্যা সমাধান করে না (কৌশলগতভাবে আমি কেবলমাত্র এলটিএস সংস্করণে কাজ করি)। ফাইলগুলি কীভাবে পাবেন?
রচনা ব্যবহার করে। কোড দেওয়া, আমার কাছে একটি সংবেদন সৃষ্টি করে যে এটি মডিউলটির ভিতরে রয়েছে, তাই এটি করার জন্য একটি ফাংশন থাকা উচিত। যদি তা না হয় তবে আপনার জন্য আইআইএফই ব্যবহার করা উচিত একটি অ্যাসিঙ্ক ফাংশনটিতে রোল কোডটি মোড়ানোর জন্য যা আপনার পক্ষে সব কিছু করে দেয়, বা আপনি সঠিক উপায়ে যেতে পারেন, সেখানে রচনা রয়েছে।
// more complex version with IIFE to a single module
(async (files) => readFiles(await files())(getFilesPath)
দ্রষ্টব্য যে শব্দার্থক কারণে পরিবর্তনশীল নাম পরিবর্তন। আপনি একটি ফান্টর পাস (একটি ফাংশন যা অন্য ফাংশন দ্বারা আহ্বান করা যেতে পারে) এবং মেমোরিতে একটি পয়েন্টার গ্রহণ করে যা অ্যাপ্লিকেশনটির লজিকের প্রাথমিক ব্লক ধারণ করে।
তবে, যদি মডিউল না হয় এবং আপনার যুক্তিটি রফতানি করা দরকার?
অ্যাসিঙ্ক ফাংশনে ফাংশনগুলি মোড়ানো করুন।
export const readFilesQueue = async () => {
// ... to code goes here
}
অথবা ভেরিয়েবলের নাম পরিবর্তন করুন, যাই হোক না কেন ...
*
পার্শ্ব প্রতিক্রিয়া দ্বারা অ্যাপ্লিকেশনের কোনও প্রচ্ছন্ন প্রভাব মেনান করে যা আইও-র মতো অ্যাপ্লিকেশনটিতে স্ট্যাট্যাট / আচরণ বা ইন্ট্রোস বাগ পরিবর্তন করতে পারে।
**
"খাঁটি" দ্বারা, এটি অ্যাস্টোড্রোফে রয়েছে যেহেতু কার্যগুলি শুদ্ধ নয় এবং কোডটি খাঁটি সংস্করণে রূপান্তর করা যায়, যখন কোনও কনসোল আউটপুট না থাকে, কেবল ডেটা ম্যানিপুলেশন থাকে।
এটিকে বাদ দিয়ে, খাঁটি হওয়ার জন্য, আপনাকে এমন মনাদগুলির সাথে কাজ করতে হবে যা পার্শ্ব প্রতিক্রিয়া পরিচালনা করে, এটি ত্রুটি প্রবণ এবং অ্যাপলিকেশনের পৃথকভাবে সেই ত্রুটিটি আচরণ করে।
for ... of ...
কাজ করে?