এই উত্তর readdirSyncবা এর মতো ব্লকিং ফাংশন ব্যবহার করে না statSync। এটি বাহ্যিক নির্ভরতা ব্যবহার করে না বা কলব্যাক নরকের গভীরতায় নিজেকে খুঁজে পায় না।
পরিবর্তে আমরা আধুনিক জাভাস্ক্রিপ্ট সুবিধাদি যেমন প্রতিশ্রুতি এবং async-awaitসিনট্যাক্স ব্যবহার করি। এবং অ্যাসিনক্রোনাস ফলাফল সমান্তরালে প্রক্রিয়াজাত করা হয়; ক্রমানুসারে নয় -
const { readdir, stat } =
require ("fs") .promises
const { join } =
require ("path")
const dirs = async (path = ".") =>
(await stat (path)) .isDirectory ()
? Promise
.all
( (await readdir (path))
.map (p => dirs (join (path, p)))
)
.then
( results =>
[] .concat (path, ...results)
)
: []
আমি একটি উদাহরণ প্যাকেজ ইনস্টল করব এবং তারপরে আমাদের ফাংশনটি পরীক্ষা করব -
$ npm install ramda
$ node
চলুন দেখে নেওয়া যাক -
> dirs (".") .then (console.log, console.error)
[ '.'
, 'node_modules'
, 'node_modules/ramda'
, 'node_modules/ramda/dist'
, 'node_modules/ramda/es'
, 'node_modules/ramda/es/internal'
, 'node_modules/ramda/src'
, 'node_modules/ramda/src/internal'
]
একটি সাধারণীকরণ করা মডিউল ব্যবহার করে Parallel, আমরা এর সংজ্ঞাটি সহজ করতে পারি dirs-
const Parallel =
require ("./Parallel")
const dirs = async (path = ".") =>
(await stat (path)) .isDirectory ()
? Parallel (readdir (path))
.flatMap (f => dirs (join (path, f)))
.then (results => [ path, ...results ])
: []
Parallelউপরে ব্যবহৃত মডিউল একটি প্যাটার্ন যে একটি অনুরূপ সমস্যা সমাধানের জন্য ডিজাইন করা ফাংশন একটি সেট থেকে নিষ্কাশিত হয়। আরও ব্যাখ্যার জন্য, এই সম্পর্কিত প্রশ্নোত্তর দেখুন ।
require('path').resolve(__dirname, file)