// utils/timedCall.js const STORAGE_KEY = 'timedCallStorage'; /** * 初始化或重置定时任务 * @param {string} taskName 任务名称 * @param {function} callback 回调函数 * @param {number} interval 间隔时间(毫秒),默认5分钟 */ // export function setupTimedTask(taskName, callback, interval = 5 * 60 * 1000) { export function setupTimedTask(taskName, callback, interval = 5 * 60 * 1000) { // 清除现有定时器 clearExistingTimer(taskName); // 立即执行任务 executeTask(taskName, callback, interval); } /** * 清除定时任务 * @param {string} taskName 任务名称 */ export function clearTimedTask(taskName) { clearExistingTimer(taskName); // 更新存储 const storedData = wx.getStorageSync(STORAGE_KEY) || {}; delete storedData[taskName]; wx.setStorageSync(STORAGE_KEY, storedData); } // ========== 私有方法 ========== // 清除现有定时器 function clearExistingTimer(taskName) { const storedData = wx.getStorageSync(STORAGE_KEY) || {}; const taskData = storedData[taskName] || {}; if (taskData.timerId) { clearTimeout(taskData.timerId); } } // 执行任务并设置下一次执行 function executeTask(taskName, callback, interval) { // 执行回调函数 callback(); // 记录执行时间 const now = Date.now(); // 设置下一次执行的定时器 const timerId = setTimeout(() => { executeTask(taskName, callback, interval); }, interval); // 更新存储 updateStorage(taskName, { lastExecTime: now, timerId: timerId, interval: interval }); } // 更新存储数据 function updateStorage(taskName, newData) { const storedData = wx.getStorageSync(STORAGE_KEY) || {}; storedData[taskName] = { ...(storedData[taskName] || {}), ...newData }; wx.setStorageSync(STORAGE_KEY, storedData); }