const setItem = (key, data) => {
|
return new Promise((resolve, reject) => {
|
if (!key) {
|
reject(new Error('存储键不能为空'));
|
return;
|
}
|
|
wx.setStorage({
|
key: key,
|
data: data,
|
success: resolve,
|
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: (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: (err) => {
|
console.error(`删除存储项 ${key} 失败:`, err);
|
reject(err);
|
}
|
});
|
});
|
};
|
|
const clear = () => {
|
return new Promise((resolve, reject) => {
|
wx.clearStorage({
|
success: resolve,
|
fail: (err) => {
|
console.error('清除存储失败:', err);
|
reject(err);
|
}
|
});
|
});
|
};
|
|
/**
|
* 判断本地是否保存了某个key
|
* @param {String} key 存储键
|
* @returns {Boolean} 是否存在该键
|
*/
|
const isHasKeySync = (key) => {
|
if (!key) return false;
|
|
try {
|
const res = wx.getStorageInfoSync();
|
return res.keys.includes(key);
|
} catch (e) {
|
console.error('获取存储信息失败:', e);
|
return false;
|
}
|
};
|
|
module.exports = {
|
setItem,
|
getItem,
|
getItemSafe,
|
removeItem,
|
clear,
|
isHasKeySync
|
};
|