const fs = require('fs').promises;
const path = require('path');
/**
* Imports data from directories with fixed retry intervals.
* @param {string[]} directories An array of directory paths.
* @param {number} retryIntervalMs The retry interval in milliseconds.
* @returns {Promise<object>} An object containing the imported data. Returns an empty object if no directories are provided.
*/
async function importDataFromDirectories(directories, retryIntervalMs) {
if (!directories || directories.length === 0) {
return {}; // Handle empty directory list
}
const importedData = {};
for (const directory of directories) {
try {
const files = await fs.readdir(directory); // Read directory contents
importedData[directory] = await processDirectory(directory, files);
} catch (err) {
console.error(`Error reading directory ${directory}:`, err);
await delay(retryIntervalMs); // Retry after interval
try {
const files = await fs.readdir(directory); // Retry read
importedData[directory] = await processDirectory(directory, files);
} catch (retryErr) {
console.error(`Error reading directory ${directory} after retry:`, retryErr);
importedData[directory] = null; // Mark as failed
}
}
}
return importedData;
}
/**
* Processes a single directory and its files.
* @param {string} directoryPath The path to the directory.
* @param {string[]} files An array of file names in the directory.
* @returns {object} An object containing the processed data for the directory.
*/
async function processDirectory(directoryPath, files) {
const data = {};
for (const file of files) {
const filePath = path.join(directoryPath, file);
try {
const fileContent = await fs.readFile(filePath, 'utf8'); // Read file content
data[file] = fileContent; // Store file content
} catch (err) {
console.error(`Error reading file ${filePath}:`, err);
data[file] = null; // Mark as failed
}
}
return data;
}
/**
* Delays execution for a specified number of milliseconds.
* @param {number} ms The delay in milliseconds.
* @returns {Promise<void>} A promise that resolves after the delay.
*/
function delay(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
module.exports = importDataFromDirectories;
Add your comment