जैसे @ बर्गी की प्रतिक्रिया, लेकिन एक अंतर के साथ।
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)
ध्यान दें कि शब्दार्थ के कारण परिवर्तनशील का नाम बदल जाता है। आप एक फ़नकार (एक फ़ंक्शन जिसे किसी अन्य फ़ंक्शन द्वारा आमंत्रित किया जा सकता है) पास करते हैं और मेमोरी पर एक पॉइंटर को पुनः प्राप्त करता है जिसमें एप्लिकेशन के तर्क का प्रारंभिक ब्लॉक होता है।
लेकिन, अगर एक मॉड्यूल नहीं है और आपको तर्क को निर्यात करने की आवश्यकता है?
फ़ंक्शन को एक async फ़ंक्शन में लपेटें।
export const readFilesQueue = async () => {
// ... to code goes here
}
या चर के नाम बदलें, जो भी ...
*
साइड इफ़ेक्ट मेनन द्वारा अनुप्रयोग के किसी भी कोलेटेरल प्रभाव को प्रभावित करता है जो आईओ की तरह, स्टेटमेंट / व्यवहार या अनुप्रयोग में खराब होने वाले कीड़े को बदल सकता है।
**
"शुद्ध" द्वारा, यह एपोस्ट्रोफ में है क्योंकि फ़ंक्शन यह शुद्ध नहीं है और कोड को शुद्ध संस्करण में परिवर्तित किया जा सकता है, जब कोई कंसोल आउटपुट नहीं होता है, केवल डेटा जोड़तोड़ होता है।
इसके अलावा, शुद्ध होने के लिए, आपको साइड इफेक्ट्स को संभालने वाले मोनाड्स के साथ काम करने की आवश्यकता होगी, जो त्रुटि प्रवण हैं, और उस त्रुटि को एप्लिकेशन के अलग से मानते हैं।
for ... of ...
काम क्यों करता है ?