#javascript #while-loop
Вопрос:
Я хочу создать цикл while, в котором он будет прерываться всякий раз, когда закончится время ожидания или будет выполнено условие
async checkFile (filePath) {
const readDir = fs.readdirSync(filePath,'utf-8')
while(true) {
if(readDir === filename) {
break;
}
}
}
Комментарии:
1. Используйте
Promise.any()
с двумя обещаниями, одно из которых «условие выполнено», а другое «время истекло». РешениеPromise.any()
будет принято, когда любой из них будет выполнен.2. Какой тайм-аут? Какое условие — оба
true
иreadDir
являются постоянными во время вашего цикла? Что такоеfilename
?3. … почему асинхронный подход (тайм-аут операции, предлагаемое обещание) в любом случае, когда метод чтения предполагает иное …
fs.readdirSync
? … как насчет…filenames = fs.readdirSync(filePath,'utf-8'); filenames.forEach(file => console.log(file));
(Я не являюсь node.js специалист по файловой системе)4. в вашей первой строке отсутствует
function
ключевое слово послеasync
. Если только это не метод из класса. Есть три способа выполнить вашу задачу, используя обещание, которое будет выполнено либо при обнаружении файла, либо при истечении времени ожидания. Если в вашем цикле есть неблокирующие действия, вы можете установить время ожидания для изменения условия while. Вы также можете проверить внутри своего цикла, чтобы узнать, прошло ли время с начала вашего цикла.5. Возможно, ОП также рассмотрит возможность изучения документации файловой системы узла
Ответ №1:
Как насчет чего-нибудь в этом роде? Создание переменной даты начала, а затем выполнение условия для цикла, чтобы текущая дата — дата начала была меньше 1000 (мс) или любой другой тайм-аут, который вы бы предпочли
async checkFile(filePath) {
const readDir = fs.readdirSync(filePath,'utf-8');
const start = new Date();
while ((new Date()) - start < 1000) {
if(readDir === filename) {
break;
}
}
}
Комментарии:
1. Я добавлю, что если вы используете подобный цикл для напряженного ожидания, он не идеален в js. Напряженное ожидание обходится дорого, требует больших ресурсов. Было бы лучше иметь обещание, которое будет выполнено, когда условие будет выполнено.