【问题标题】:How to break while loop either with timeout or condition is fullfiled?如何在超时或满足条件的情况下打破while循环?
【发布时间】:2021-12-14 01:52:32
【问题描述】:

我想创建一个 while 循环,只要超时完成或满足条件,它就会中断

async checkFile (filePath) {
    const readDir =  fs.readdirSync(filePath,'utf-8')
    while(true) {
        if(readDir === filename) {
            break;
        }
        
    } 
}

【问题讨论】:

  • Promise.any() 与两个 Promise 一起使用,一个是“条件满足”,另一个是“时间到了”。 Promise.any() 将在其中任何一个完成后解析。
  • 什么超时?什么条件 - truereadDir 在你的循环中是不变的? filename 是什么?
  • ...为什么异步方法(OP的超时,建议的承诺)无论如何当阅读方法建议时...fs.readdirSync? ...怎么样...filenames = fs.readdirSync(filePath,'utf-8'); filenames.forEach(file => console.log(file));(我不是 node.js 文件系统专家)
  • 您的第一行在async 之后缺少function 关键字。除非它是一个类的方法。有三种方法可以完成您的任务,使用在找到文件或超时时解决的承诺。如果您的循环中有非阻塞操作,您可以设置超时来更改 while 条件。您还可以在循环内部进行检查,以查看循环开始时是否已经过去。
  • 也许 OP 也考虑调查Node's File system documentation

标签: javascript while-loop


【解决方案1】:

这样的事情怎么样? 创建一个开始日期变量,然后循环条件是当前日期 - 开始日期小于 1000 (ms) 或任何您喜欢的超时时间

async checkFile(filePath) {
    const readDir =  fs.readdirSync(filePath,'utf-8');
    const start = new Date();
    while ((new Date()) - start < 1000) {
        if(readDir === filename) {
            break;
        }

    }
}

【讨论】:

  • 我会补充一点,如果您使用这样的循环来忙等待,那么它在 js 中并不理想。忙碌的等待代价高昂,资源繁重。最好有一个在满足条件时解决的承诺。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-01-20
  • 2018-01-17
  • 2010-11-06
  • 2020-04-21
  • 1970-01-01
  • 1970-01-01
  • 2017-08-01
相关资源
最近更新 更多