You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TypeScript递归实现文件存在性轮询检查问题求助

实现文件存在性循环检查直到成功的方案

你的现有代码仅执行一次检查,要实现失败后自动重试直到结果为true的逻辑,可以通过异步循环结合等待函数来实现。同时建议将检查逻辑抽成独立函数,让代码更灵活可复用,以下是具体修改方案:

1. 保留基础等待函数

原有的sleepTimeout可以直接复用(适配TypeScript类型):

function sleepTimeout(interval: number): Promise<void> {
  return new Promise((resolve) => {
    setTimeout(resolve, interval);
  });
}

2. 定义文件存在性检查函数

基于Node.js的fs模块实现异步文件检查:

import fs from 'fs/promises';

async function checkFileExists(filePath: string): Promise<boolean> {
  try {
    await fs.access(filePath);
    return true;
  } catch {
    return false;
  }
}

3. 实现循环重试逻辑

编写带重试机制的核心函数,支持自定义检查间隔和最大重试次数(避免无限循环):

async function waitForFile(
  filePath: string,
  checkInterval: number = 2000,
  maxRetries?: number
): Promise<void> {
  let retryCount = 0;

  while (true) {
    // 等待指定间隔后执行检查
    await sleepTimeout(checkInterval);
    
    const fileExists = await checkFileExists(filePath);
    if (fileExists) {
      console.log('OK - 文件已存在');
      return; // 检查成功,退出循环
    }

    retryCount++;
    console.log(`KO - 文件不存在,第${retryCount}次重试`);

    // 若设置了最大重试次数,超过则终止并抛出错误
    if (maxRetries && retryCount >= maxRetries) {
      throw new Error(`已达最大重试次数(${maxRetries}),文件仍未找到`);
    }
  }
}

4. 调用示例

// 示例:每2秒检查一次目标文件,最多重试10次
waitForFile('./target-file.txt', 2000, 10)
  .then(() => {
    // 文件存在后执行后续流程
    console.log('开始处理文件...');
  })
  .catch((err) => {
    console.error(err.message);
  });

逻辑说明

  • 使用while(true)实现持续循环,直到检查成功或触发终止条件
  • 每次检查前先等待指定间隔,避免频繁IO操作
  • 加入maxRetries参数是生产环境的安全实践,防止无限占用资源

内容的提问来源于stack exchange,提问作者build

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 06:10:32