Если вы используете какие-либо методы синхронизации, вы в основном блокируете цикл обработки событий.Вы должны изменить всю структуру вашего кода и начать использовать обещания везде.Вы должны быть в состоянии создать еще один сервис на angular, который проверяет, завершен ли процесс переименования, используя timeInterval и GET-запросы (самый простой способ).Например, вы можете установить angular для выборки данных из "/ isRenameCompleted" и предупредить пользователя, если результат равен true или что-то еще.Для получения результатов в режиме реального времени вы должны переключиться на Socket-Io.Быстрое решение для 1 клиента (потому что вам нужно хранить уникальные идентификаторы для каждого запроса и соответственно получать обещания) может быть таким:
1: создайте две глобальные переменные поверх вашего кода
var filesStatus="waiting"
var pendingFiles=[]
2: Внутри логического маршрута переименования нажмите каждый файл в массиве обещаний, используя цикл for, и начните асинхронно ждать завершения процесса переименования
pendingFiles.push(fsPromises.rename(oldName,newName))
Promise.all(pendingFiles)
.then(values => {
filesStatus = "done"
})
.catch(error => {
filesStatus = "error"
});
filesStatus="pending"
3: Теперь добавьтеновый маршрут /isRenameCompleted
, который будет иметь логику отчета, подобную следующей
router.get('/isRenameCompleted', (req, res, next) => {
if (filesStatus==="pending"){
res.end("please wait")
} else if (filesStatus==="done"){
res.end("done! your files renamed")
}
}