ReactNative实现键值对的同步存取
官方 AsyncStorage
- AsyncStorage 是一个简单的、异步的、持久化的 Key-Value 存储系统。
- 由于是异步的,每个方法都会返回一个 Promise,不满足同步存取需求。
- 它的使用请参考官方实例。
实现同步存取的两种方案
使用静态对象持有
-
思路分析:
- 在App启动时,从 AsyncStorage 中异步读取所有键值对,并赋值给静态变量;
- 调用 setValue(key) 时先将其加入到静态变量中,之后再异步存入 AsyncStorage;
- 调用 getValue(key) 时直接从静态变量中读取,实现同步存取;
-
优缺点分析:
- 优点:代码实现量少,不需要引入其他第三方库做支撑,存储任务实际上仍旧由系统提供的 AsyncStorage 完成。
- 缺点:由于第一步的 init 读取所有键值对仍然是异步操作,所以需要在 App 初始化时完成这一操作,并且在初始化时不能执行同步读取,因为此时可能静态变量可能并未赋值成功。
-
代码实现:
export default class SyncStorage { static cache: { [key: string]: string } = { } // 初始化需要在App启动时执行 static async init() { let keys = await AsyncStorage.getAllKeys() let items = await AsyncStorage.multiGet(keys).then() items.map(([key, value]) =>