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
相关产品推荐
相关产品推荐

