uni-app中uni.getStorageInfoSync().keys获取到空数组
uni-app中uni.getStorageInfoSync().keys获取到空数组
uni.getStorageInfoSync().keys获取到空数组,不确定是过大还是什么问题,一段时间后获取变[]
提供下 vue 和HBuilderX 版本,keys 返回值是始终为空数组,还是做了操作后变成空数组,其他平台、系统是否正常
vue2写的安卓app应用,HBuilderX4.36,一开始是能正常返回的,但储存大量数据后过一段时间就不能读取回来了,getStorage和setStorage是可以继续操作的,就是uni.getStorageInfoSync().keys为空数组(plus.storage.getAllKeys()也一样),也不报错,try没捕获到异常
回复 jahem: 有两个隐患一个是 storage 不能存储大量数据,不安全不可靠。你是说存储大量数据之后 sync 不行,但是异步的 getStorage 正常吗,做一个 demo 吧
在uni-app中,uni.getStorageInfoSync().keys
用于同步获取当前存储中的所有键名。如果你遇到了获取到空数组的情况,这通常意味着当前存储(localStorage)中没有保存任何数据。不过,也有可能是代码逻辑或存储操作有误导致的。下面是一些检查和调试的步骤,以及相关的代码示例。
检查步骤
-
确保存储数据: 确保在调用
uni.getStorageInfoSync().keys
之前,已经有数据被存储到 localStorage 中。 -
使用正确的存储方法: 使用
uni.setStorageSync
或uni.setStorage
来存储数据。 -
检查存储权限: 虽然uni-app通常不需要额外的存储权限,但在某些平台上(如小程序),需要注意是否有存储限制。
代码示例
存储数据
// 存储一些数据到 localStorage
uni.setStorageSync('key1', 'value1');
uni.setStorageSync('key2', 'value2');
获取存储信息
// 获取存储信息
const storageInfo = uni.getStorageInfoSync();
console.log('存储信息:', storageInfo);
// 获取所有键名
const keys = storageInfo.keys;
console.log('存储的键名:', keys);
完整示例
// 存储数据
uni.setStorageSync('user', { name: '张三', age: 30 });
uni.setStorageSync('token', '123456abcdef');
// 延时模拟异步操作(实际开发中可能不需要)
setTimeout(() => {
// 获取存储信息
const storageInfo = uni.getStorageInfoSync();
console.log('存储信息:', storageInfo);
// 获取所有键名
const keys = storageInfo.keys;
if (keys.length === 0) {
console.warn('没有存储任何键名');
} else {
console.log('存储的键名:', keys);
}
// 检查特定键是否存在
if (keys.includes('user')) {
console.log('键 "user" 存在');
const user = uni.getStorageSync('user');
console.log('键 "user" 对应的值:', user);
} else {
console.warn('键 "user" 不存在');
}
}, 1000); // 延时1秒执行
注意事项
- 确保在调用
uni.getStorageInfoSync().keys
之前数据已经被正确存储。 - 如果是在页面加载时立即调用,可能需要确保存储操作已经完成(例如,通过页面生命周期函数或异步回调)。
- 使用
console.log
或调试工具来跟踪存储和检索操作的状态,有助于诊断问题。
通过上述步骤和代码示例,你应该能够诊断并解决 uni.getStorageInfoSync().keys
返回空数组的问题。