React Native中getAllData()返回{_h:0,_i:0,_j:null,_k:null}异常求助
解决getAllData()返回Promise内部结构及逻辑错误的问题
问题原因分析
Promise未正确处理
你看到的{"_h": 0, "_i": 0, "_j": null, "_k": null}并非加密内容,而是异步函数返回的Promise对象处于pending状态时的内部结构。getAllData()是async函数,直接打印它的调用结果时,并未等待异步操作完成,所以输出的是Promise对象本身,不是最终的返回数据。数据存储与读取逻辑不匹配
你的代码将完整的TodoData对象存在todoData这一个key下,但getAllData()里错误地判断key是否为title或items——实际存储中根本不存在这两个key,导致遍历keys时只会进入else分支,返回默认的空对象。
修复步骤
- 修正异步结果的获取方式
在addTitle方法中,必须用await等待getAllData()完成后再打印结果:
async addTitle(title: string) { console.log("Adding " + title) const data = await this.getData('todoData'); const newData = { ...data, title }; await this.saveData('todoData', newData); // 用await获取实际返回数据 const allData = await this.getAllData(); console.log(allData); }
- 重构getAllData的逻辑
根据当前的存储逻辑(所有数据存在todoDatakey下),调整getAllData以正确读取数据:
async getAllData(): Promise<TodoData[]> { const data = await this.getData('todoData'); // 返回包含该数据的数组,匹配类型定义 return [data]; }
如果你的实际需求是存储多个独立的todo列表,需要调整saveData和add系列方法,为每个todo列表分配唯一key,但当前代码逻辑是单key存储,按此修正即可。
- 类型安全优化(可选)
为saveData的data参数指定类型,避免传入不符合规范的数据:
private async saveData(key: string, data: TodoData) { await AsyncStorage.setItem(key, JSON.stringify(data)); }
内容的提问来源于stack exchange,提问作者Happer64Bit
相关产品推荐
相关产品推荐

