|  |  |  | 
|---|
|  |  |  | const setItem = (key, data) => { | 
|---|
|  |  |  | return new Promise((resolve, reject) => { | 
|---|
|  |  |  | if (!key) { | 
|---|
|  |  |  | reject(new Error('存储键不能为空')); | 
|---|
|  |  |  | return; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | wx.setStorage({ | 
|---|
|  |  |  | key: key, | 
|---|
|  |  |  | data: data, | 
|---|
|  |  |  | success: resolve, | 
|---|
|  |  |  | fail: reject | 
|---|
|  |  |  | fail: (err) => { | 
|---|
|  |  |  | console.error(`设置存储项 ${key} 失败:`, err); | 
|---|
|  |  |  | reject(err); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | }; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | const getItem = (key) => { | 
|---|
|  |  |  | return new Promise((resolve, reject) => { | 
|---|
|  |  |  | if (!key) { | 
|---|
|  |  |  | reject(new Error('存储键不能为空')); | 
|---|
|  |  |  | return; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | wx.getStorage({ | 
|---|
|  |  |  | key: key, | 
|---|
|  |  |  | success: (res) => resolve(res.data), | 
|---|
|  |  |  | fail: reject | 
|---|
|  |  |  | fail: (err) => { | 
|---|
|  |  |  | console.error(`获取存储项 ${key} 失败:`, err); | 
|---|
|  |  |  | reject(err); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | }; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 安全获取存储项,失败时返回默认值而不是拒绝Promise | 
|---|
|  |  |  | const getItemSafe = (key, defaultValue = null) => { | 
|---|
|  |  |  | return new Promise((resolve) => { | 
|---|
|  |  |  | if (!key) { | 
|---|
|  |  |  | resolve(defaultValue); | 
|---|
|  |  |  | return; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | wx.getStorage({ | 
|---|
|  |  |  | key: key, | 
|---|
|  |  |  | success: (res) => resolve(res.data), | 
|---|
|  |  |  | fail: (err) => { | 
|---|
|  |  |  | // 在开发环境下记录警告,但不作为错误处理 | 
|---|
|  |  |  | // 数据不存在是正常情况,不需要作为警告输出 | 
|---|
|  |  |  | if (err.errMsg !== "getStorage:fail data not found") { | 
|---|
|  |  |  | console.warn(`安全获取存储项 ${key} 失败:`, err); | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | console.log(`存储项 ${key} 不存在,返回默认值`); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | resolve(defaultValue); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | }; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | const removeItem = (key) => { | 
|---|
|  |  |  | return new Promise((resolve, reject) => { | 
|---|
|  |  |  | if (!key) { | 
|---|
|  |  |  | reject(new Error('存储键不能为空')); | 
|---|
|  |  |  | return; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | wx.removeStorage({ | 
|---|
|  |  |  | key: key, | 
|---|
|  |  |  | success: resolve, | 
|---|
|  |  |  | fail: reject | 
|---|
|  |  |  | fail: (err) => { | 
|---|
|  |  |  | console.error(`删除存储项 ${key} 失败:`, err); | 
|---|
|  |  |  | reject(err); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | }; | 
|---|
|  |  |  | 
|---|
|  |  |  | return new Promise((resolve, reject) => { | 
|---|
|  |  |  | wx.clearStorage({ | 
|---|
|  |  |  | success: resolve, | 
|---|
|  |  |  | fail: reject | 
|---|
|  |  |  | fail: (err) => { | 
|---|
|  |  |  | console.error('清除存储失败:', err); | 
|---|
|  |  |  | reject(err); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | }; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 判断本地是否保存了某个key | 
|---|
|  |  |  | * @param {} key | 
|---|
|  |  |  | * @param {String} key 存储键 | 
|---|
|  |  |  | * @returns {Boolean} 是否存在该键 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | const isHasKeySync= (key) => { | 
|---|
|  |  |  | const isHasKeySync = (key) => { | 
|---|
|  |  |  | if (!key) return false; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | const res = wx.getStorageInfoSync(); | 
|---|
|  |  |  | return res.keys.includes(key); | 
|---|
|  |  |  | } catch (e) { | 
|---|
|  |  |  | console.error('Failed to get storage info:', e); | 
|---|
|  |  |  | console.error('获取存储信息失败:', e); | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }; | 
|---|
|  |  |  | 
|---|
|  |  |  | module.exports = { | 
|---|
|  |  |  | setItem, | 
|---|
|  |  |  | getItem, | 
|---|
|  |  |  | getItemSafe, | 
|---|
|  |  |  | removeItem, | 
|---|
|  |  |  | clear, | 
|---|
|  |  |  | isHasKeySync | 
|---|