यह उत्तर अवरुद्ध कार्यों का उपयोग नहीं करता है जैसे 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)