使用chokidar获取目录文件名存入数组后打印为空如何解决
原因说明
该问题由异步执行时序导致:chokidar的目录扫描、事件触发均为异步操作,chokidar.watch启动后不会阻塞后续同步代码执行,你写在监听逻辑外的console.log(currentData)是同步代码,会在chokidar完成目录扫描、触发任何事件回调之前就执行完毕,此时数组还未被推入任何元素,因此打印为空。你的数组push逻辑本身没有问题,也不存在空路径覆盖的情况。
实现方案
如果需要获取初始扫描完成后的全量文件路径,监听chokidar内置的ready事件即可,该事件会在初始目录扫描完成、所有初始文件的新增事件都触发结束后执行:
const chokidar = require('chokidar'); const currentData = [] const watcher = chokidar.watch('./dirPATH') watcher.on('all', (event, path) => { // 可根据需求过滤事件类型,例如仅新增文件时push:if (event === 'add') if (path?.trim()) { // 简化空值校验逻辑 currentData.push(path); } console.log(path) }); // 初始扫描完成后触发,可拿到全量初始文件路径 watcher.on('ready', () => { console.log(currentData) // 如果不需要后续监听文件变化,可在此处关闭watcher // watcher.close() }) // 后续如果需要获取实时更新的文件列表,在对应业务逻辑的执行时机直接访问currentData即可
内容的提问来源于stack exchange,提问作者seriously
相关产品推荐
相关产品推荐

