You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React Native中getAllData()返回{_h:0,_i:0,_j:null,_k:null}异常求助

解决getAllData()返回Promise内部结构及逻辑错误的问题

问题原因分析

  1. Promise未正确处理
    你看到的{"_h": 0, "_i": 0, "_j": null, "_k": null}并非加密内容,而是异步函数返回的Promise对象处于pending状态时的内部结构。getAllData()是async函数,直接打印它的调用结果时,并未等待异步操作完成,所以输出的是Promise对象本身,不是最终的返回数据。

  2. 数据存储与读取逻辑不匹配
    你的代码将完整的TodoData对象存在todoData这一个key下,但getAllData()里错误地判断key是否为title或items——实际存储中根本不存在这两个key,导致遍历keys时只会进入else分支,返回默认的空对象。


修复步骤

  1. 修正异步结果的获取方式
    在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);
}
  1. 重构getAllData的逻辑
    根据当前的存储逻辑(所有数据存在todoDatakey下),调整getAllData以正确读取数据:
async getAllData(): Promise<TodoData[]> {
  const data = await this.getData('todoData');
  // 返回包含该数据的数组,匹配类型定义
  return [data];
}

如果你的实际需求是存储多个独立的todo列表,需要调整saveData和add系列方法,为每个todo列表分配唯一key,但当前代码逻辑是单key存储,按此修正即可。

  1. 类型安全优化(可选)
    为saveData的data参数指定类型,避免传入不符合规范的数据:
private async saveData(key: string, data: TodoData) {
  await AsyncStorage.setItem(key, JSON.stringify(data));
}

内容的提问来源于stack exchange,提问作者Happer64Bit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 22:38:17