HarmonyOS TurboModule中如何获取context和合并两个对象?

export interface LocationInfo { 
  lon: string; 
  lat: string; 
  pr: string; 
  ci: string; 
  di: string; 
} 
 
export interface DevicesInfo extends LocationInfo { 
  v_name: string; 
} 
 
export class SampleTurboModule extends TurboModule { 
  private context: RNOHContext; 
 
  constructor(ctx: RNOHContext) { 
    super(ctx); 
    this.context = ctx; 
  } 
 
  //获取设备信息 
  getDeviceInfo(): Promise<DevicesInfo> { 
    return new Promise(async (resolve) => { 
      let vName = await CommonUtils.getVersionName(); 
      let pref = CommonUtils.getPreferences(this.context.uiAbilityContext) 
      let defaultLocInfo: LocationInfo = { 
        lon: '', 
        lat: '', 
        pr: '', 
        ci: '', 
        di: '', 
      } 
      let locInfo = pref.getSync("LocationInfo", defaultLocInfo) 
 
    }); 
  } 
}

​我这里通过pref.getSync获取到了缓存的locInfo,我想将locInfo添加一个{v_name:vName}变成DevicesInfo应该怎么做呢?

我使用Object.assign合并或者…解构对象好像不行。

还有就是这里通过TurboModule的构造方法获取context这种做法可以吗?​

HarmonyOS
2024-11-19 10:23:05
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
fox280

1、获取context可以考虑在ArkTS侧获取到Context后存储到全局Map中,然后在TurboModule中获取全局Map中的Context。

export class GlobalContext { 
  private constructor() { 
  } 
 
  private static instance: GlobalContext; 
  private _objects = new Map<string, Object>(); 
  public static getContext(): GlobalContext { 
    if (!GlobalContext.instance) { 
      GlobalContext.instance = new GlobalContext(); 
    } 
    return GlobalContext.instance; 
  } 
  getObject(value: string): Object | undefined { 
    return this._objects.get(value); 
  } 
  setObject(key: string, objectClass: Object): void { 
    this._objects.set(key, objectClass); 
  } 
}

2、合并对象:ArkTS不支持 Object.assign,可以试试下面的示例。

function arrayToMap(arr: Record<string, Object>[]) { // Record<string, Object>[] is more appropriate than Object[] 
  if (!arr || arr.length === 0) { 
    return null; 
  } 
  let map: Record<string, Object> = {}; 
  for (let index = 0; index < arr.length; index++) { 
    const item = arr[index]; 
    if (item) { 
      for (let k of Object.keys(item)) { 
        map[k] = item[k] 
      } 
    } 
  } 
  return map; 
}
分享
微博
QQ
微信
回复
2024-11-19 15:10:58
相关问题
有谁知道如何合并两个对象
2820浏览 • 1回复 待解决
HarmonyOS ets文件,合并两个Record记录
556浏览 • 1回复 待解决
鸿蒙如何获取context对象
9322浏览 • 1回复 待解决
如何在ArkTS合并对象
1558浏览 • 1回复 待解决
如何在ArkTS合并对象
1079浏览 • 1回复 待解决
HarmonyOS 如何比较两个日期的大小?
296浏览 • 1回复 待解决
HarmonyOS 两个同级的组件问题
420浏览 • 1回复 待解决
HarmonyOS 两个枚举类型之间转换问题
149浏览 • 1回复 待解决
如何让Swiper在一屏显示两个Item?
1150浏览 • 1回复 待解决
两个设备控制相关问题
9066浏览 • 3回复 已解决
页面导航如何实现两个页面叠层
1953浏览 • 1回复 待解决
关于SQL查询两个表查询
2916浏览 • 1回复 待解决
关于Image组件的两个问题
408浏览 • 1回复 待解决
两个重叠的组件如何实现事件透传
637浏览 • 1回复 待解决