HarmonyOS鸿蒙Next中勾子aboutToAppear()里不能读取本地数据库里数据?

HarmonyOS鸿蒙Next中勾子aboutToAppear()里不能读取本地数据库里数据?

DatabaseConnection .getInstance() .initRdbStore(this.context) //table create. 已经建表,已经插入数据了。

把事件放在Button里 可以读取到信息。



```javascript
Button('read table')
.width('100%')
.fontSize(30)
.onClick(()=>{
setTimeout(()=>{
DatabaseConnection.getInstance().query(this.context).then( (resultSet:MyPossessionsClass[])=>{
 this.ItemList =resultSet; 
}) 
},2000)
console.log('读取到信息:'+JSON.stringify(this.ItemList ));
})

放在勾子aboutToAppear()里却不能读取信息

aboutToAppear(): void {
setTimeout(()=>{
  DatabaseConnection.getInstance().query(this.context).then( (resultSet:MyPossessionsClass[])=>{
    this.ItemList =resultSet;
  })
},2000)

console.log('读取Table所有信息?:'+JSON.stringify(this.ItemList));
}

结果 this.ItemList 是空的。

为什么?


更多关于HarmonyOS鸿蒙Next中勾子aboutToAppear()里不能读取本地数据库里数据?的实战教程也可以访问 https://www.itying.com/category-93-b0.html

4 回复

你这console的位置肯定是空的,你把console放到setTimeout里面看看。

更多关于HarmonyOS鸿蒙Next中勾子aboutToAppear()里不能读取本地数据库里数据?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


改成同步读取呢   代码块的回调在后面,写个await

在HarmonyOS鸿蒙Next中,aboutToAppear()生命周期钩子主要用于页面即将显示时的初始化操作。由于aboutToAppear()执行时,页面尚未完全渲染,此时直接读取本地数据库可能会导致数据获取失败或页面渲染延迟。建议将数据库读取操作放在onPageShow()onReady()等生命周期钩子中,以确保页面渲染完成后再进行数据操作。

在HarmonyOS Next中,aboutToAppear()生命周期钩子里无法正确读取数据库数据的问题,主要是由于生命周期执行时序导致的。

  1. 异步时序问题:
  • aboutToAppear()执行时,数据库可能尚未完成初始化
  • 你虽然使用了setTimeout延迟2秒,但console.log是同步执行的,此时then回调还未触发
  1. 正确的处理方式应该是:
aboutToAppear(): void {
  DatabaseConnection.getInstance().query(this.context).then((resultSet: MyPossessionsClass[]) => {
    this.ItemList = resultSet;
    console.log('读取到信息:', this.ItemList); // 在回调中打印结果
  });
}
  1. 如果必须确保数据加载完成后再渲染界面,建议:
  • 使用@State装饰器标记ItemList
  • 在回调中更新状态,触发UI自动刷新
  • 在UI中添加加载状态判断
  1. 与Button点击事件的区别:
  • 按钮点击时数据库已完全初始化
  • aboutToAppear执行时可能还在初始化阶段

建议去掉setTimeout,直接使用Promise回调处理异步结果,并将日志输出移到回调内部即可正确获取数据。

回到顶部