/** * 5+存储工具类 - 解决跨页面取值不一致问题 * @author 你的名字 */ export const storage = { /** * 存储数据(同步等待完成) * @param {string} key 存储键名(统一小写,避免大小写问题) * @param {any} value 存储值(支持对象,自动序列化) * @returns {Promise} 是否存储成功 */ setItem: (key, value) => { return new Promise((resolve) => { try { // 统一键名格式(小写+去空格),避免键名不一致 const finalKey = key.trim().toLowerCase(); // 序列化对象(如果是对象/数组,必须转JSON) const finalValue = typeof value === 'object' ? JSON.stringify(value) : String(value); // 执行存储 plus.storage.setItem(finalKey, finalValue); // 强制触发存储同步(关键:解决即时读取不一致) setTimeout(() => resolve(true), 100); } catch (e) { console.error('存储失败:', e); resolve(false); } }); }, /** * 读取数据(同步读取) * @param {string} key 存储键名 * @param {any} defaultValue 默认值(读取失败时返回) * @returns {any} 读取到的值(自动反序列化对象) */ getItem: (key, defaultValue = null) => { try { const finalKey = key.trim().toLowerCase(); const value = plus.storage.getItem(finalKey); // 反序列化JSON(如果是对象/数组) if (value === 'undefined' || value === null || value === '') { return defaultValue; } try { return JSON.parse(value); // 尝试解析对象 } catch (e) { return value; // 非对象直接返回 } } catch (e) { console.error('读取失败:', e); return defaultValue; } }, /** * 清除指定键 * @param {string} key 键名 */ removeItem: (key) => { const finalKey = key.trim().toLowerCase(); plus.storage.removeItem(finalKey); } };