Я работаю над функцией загрузки изображений в 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.info(resp);
})
Теперь у меня вопрос, могу ли я сделать это другим простым способом или более оптимизированным способом. Заранее благодарим за любую помощь.
Это для демонстрационных целей, и да, есть некоторая задержка при проверке файла.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Проверка файла более одного раза без задержки вряд ли поможет. Возможно ли, что файл создается между вашими проверками?