Я работаю над функцией загрузки изображений в файле node.js, в котором у меня есть массив из нескольких файловых объектов, и в каждом массиве есть путь к файлу хранения по умолчанию, если изображение, а также статус приоритета.Вот так
var imagesArr = [
{path: "./img/img_3.jpg", priority: 3}, //exist
{path: "./img/img_1.jpg", priority: 1}, //exist
{path: "./img/img_5.jpg", priority: 5}, //exist
{path: "./img/img_2.jpg", priority: 2}, //exist
{path: "./img/img_4.jpg", priority: 4}, //exist
{path: "./img/img_7.jpg", priority: 7}, //not exist
{path: "./img/img_6.jpg", priority: 6}, //not exist
];
Сначала мне нужно отсортировать массив по приоритету.Итак, я сделал это, чтобы получить новый отсортированный массив.
var sortedFileArr = imagesArr.sort(function(a, b) {return (a.priority > b.priority) ? 1 : ((b.priority > a.priority) ? -1 : 0);} );
Теперь мне нужно перебрать массив, чтобы проверить, существует ли каждый файл с указанным путем или нет.Если да, то он будет загружен на новый целевой путь.Если нет, то я перепроверяю до 3 раз для этого файла, он существует.Если нет, то мне нужно отправить ответ, что файл не найден вместе с числом повторов.Я сделал это до сих пор, и он работает правильно.Я использую асинхронный цикл для итерации.
var resp = [];
async.each(sortedFileArr, function(fileArrItem, outerCallback) {
var searchCount = 0, fileFoundStatus = false, retryCount = 0;
while(searchCount <= 2) {
if(fs.existsSync(fileArrItem.path)) {
fileFoundStatus = true;
retryCount = searchCount;
break;
} else {
fileFoundStatus = false;
retryCount = searchCount+1;
}
searchCount++;
}
if(fileFoundStatus) {
let imgName = fileArrItem.path.split("/")[2];
fs.createReadStream(fileArrItem.path).pipe(fs.createWriteStream("./newImg/"+imgName));
resp.push({name: fileArrItem.path, status: "Found", retryCount: retryCount})
outerCallback();
} else {
resp.push({name: fileArrItem.path, status: "Not Found", retryCount: retryCount})
outerCallback();
}
}, function(err){
console.log(resp);
})
Теперь мой вопрос заключается в том, могу ли я сделать это другим простым или более оптимизированным способом.Заранее благодарим за любую помощь.