Capacitor的Storage保存数据后为什么读取不到?

UI亚龙 阅读 14

我在用Capacitor的Storage保存用户设置时遇到奇怪的问题,明明调用了set方法,但马上用get读取却返回空值,这是怎么回事?

代码是这样写的:


async function saveSettings() {
  await Capacitor.Storage.set({ key: 'theme', value: 'dark' });
  const { value } = await Capacitor.Storage.get({ key: 'theme' });
  console.log('刚保存后的值:', value); // 这里却输出null
}
saveSettings();

我已经确认过键名写对了,还特意用了async/await确保顺序执行,可就是读不到数据。试过重启应用也没用,难道是平台配置的问题?

我来解答 赞 4 收藏
二维码
手机扫码查看
2 条解答
宇文珊珊
这个问题大概率是Storage的异步机制导致的,虽然你用了async/await,但Capacitor的Storage在某些平台上可能需要额外的时间来真正完成数据持久化。

建议你改用这个方式处理:

async function saveSettings() {
await Capacitor.Plugins.Storage.set({ key: 'theme', value: 'dark' });
// 加个短暂延迟,确保存储完成
await new Promise(resolve => setTimeout(resolve, 50));
const { value } = await Capacitor.Plugins.Storage.get({ key: 'theme' });
console.log('刚保存后的值:', value);
}
saveSettings();


这里有两个关键点。第一是现在官方推荐使用Capacitor.Plugins.Storage而不是直接用Capacitor.Storage,文档更新后很多人没注意到这个变化。第二就是在set之后加了个小延迟,给底层存储引擎一点时间完成写入。

如果还是不行,可以把值先在内存里缓存起来,避免频繁读取:

let cache = {};

async function saveSettings() {
await Capacitor.Plugins.Storage.set({ key: 'theme', value: 'dark' });
cache['theme'] = 'dark'; // 写入缓存
const { value } = await Capacitor.Plugins.Storage.get({ key: 'theme' });
console.log('刚保存后的值:', value || cache['theme']);
}
saveSettings();


记得检查下你的Capacitor版本,如果是2.x升级到3.x后出现的问题,那基本就是API变更导致的。这种问题确实挺烦人的,我也被坑过好几次。
点赞 1
2026-02-17 09:09
♫银银
♫银银 Lv1
直接这样,别用 Capacitor.Storage,那个是老版本的 API 已经废弃了。换用 @capacitor/preferences:

import { Preferences } from '@capacitor/preferences';

async function saveSettings() {
await Preferences.set({ key: 'theme', value: 'dark' });
const { value } = await Preferences.get({ key: 'theme' });
console.log('刚保存后的值:', value);
}


装包命令是 npm install @capacitor/preferences,然后在原生项目里 sync 一下。我踩过这坑,Storage 就是不存数据的,官方文档都没写清楚,坑死了。
点赞
2026-02-11 11:15