* 加载所有账户数据 * @returns {Promise } 账户列表
()
| 24 | let tmpFileCounter = 0 |
| 25 | let lastBackupAt = 0 |
| 26 | |
| 27 | /** |
| 28 | * 把一次文件读写排入串行队列 |
| 29 | * @param {Function} task - 返回 Promise 的任务 |
| 30 | * @returns {Promise<*>} 任务结果 |
| 31 | */ |
| 32 | const enqueueFileTask = (task) => { |
| 33 | const result = fileWriteQueue.then(task, task) |
| 34 | // 队列本身不能因为单次失败而中断 |
| 35 | fileWriteQueue = result.then(() => { }, () => { }) |
| 36 | return result |
| 37 | } |
| 38 | |
| 39 | const sleep = (ms) => new Promise(resolve => setTimeout(resolve, ms)) |
| 40 | |
| 41 | class DataPersistence { |
| 42 | constructor() { |
| 43 | this.dataFilePath = path.join(__dirname, '../../data/data.json') |
| 44 | // 最近一次「解析成功」的快照,用于文件损坏时自愈 |
| 45 | this.backupFilePath = `${this.dataFilePath}.bak` |
| 46 | // 每个 email 的待持久化 stats 与定时器(debounce) |
no test coverage detected