HarmonyOS 在Worker线程中如何创建一个RdbStore对象

/**
 * 1. 主线程中创建Store对象,这个代码可以正常创建出来
 * 2. Worker中无法创建出来,主要是那个getContext()方法调用会block住;
 */
relationalStore.getRdbStore(getContext(), config, (err, store) => {
  // 获取到Store
})
// getContext() 会引用到common.d.ts里面的代码
// declare function getContext(component?: Object): Context;
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
HarmonyOS
2025-01-09 15:34:30
浏览
收藏 0
回答 1
回答 1
按赞同
/
按时间
zbw_apple

参考示例:

//Index.ets
import { worker } from '@kit.ArkTS';

@Entry
@Component
struct Index3 {
  @State message: string = 'Hello World';

  build() {
    Column() {
      Text(this.message)
        .id('Index3HelloWorld')
        .fontSize(50)
        .fontWeight(FontWeight.Bold)
        .alignRules({
          center: { anchor: '__container__', align: VerticalAlign.Center },
          middle: { anchor: '__container__', align: HorizontalAlign.Center }
        })
        .onClick(() => {
          let workerStageModel02 = new worker.ThreadWorker('xxxxx');
          let context = getContext()
          workerStageModel02.postMessage({ ctx: context })
        })
    }
    .height('100%')
    .width('100%')
  }
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
// Worker.ets
import { ErrorEvent, MessageEvents, ThreadWorkerGlobalScope, worker } from '@kit.ArkTS';
import { relationalStore } from '@kit.ArkData';
import { BusinessError } from '@kit.BasicServicesKit';

const workerPort: ThreadWorkerGlobalScope = worker.workerPort;

const STORE_CONFIG: relationalStore.StoreConfig = {
  name: "RdbTest.db",
  securityLevel: relationalStore.SecurityLevel.S1
};

workerPort.onmessage = (e: MessageEvents) => {
  let context = e.data.ctx as Context
  relationalStore.getRdbStore(context, STORE_CONFIG, (err: BusinessError, rdbStore: relationalStore.RdbStore) => {
    if (err) {
      console.error(`Get RdbStore failed, code is ${err.code},message is ${err.message}`);
      return;
    }
    console.info('Get RdbStore successfully.');
  })
  console.log('relationalStore:' + e.data)
}
workerPort.onmessageerror = (e: MessageEvents) => {
}
workerPort.onerror = (e: ErrorEvent) => {
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
分享
微博
QQ
微信
回复
2025-01-09 17:10:46


相关问题
如何创建一个worker线程
1550浏览 • 1回复 待解决
HarmonyOS 如何创建一个线程
695浏览 • 1回复 待解决
谁知道如何创建一个线程
984浏览 • 1回复 待解决
HarmonyOS 如何在class启动一个线程
707浏览 • 1回复 待解决
MongoDB如何创建一个新的数据库?
4510浏览 • 1回复 待解决
如何判断一个对象是否在对象数组
3112浏览 • 1回复 待解决
如何创建一个window?
936浏览 • 1回复 待解决