HarmonyOS ArkTS开发中,异步回调,怎么切到主线程执行呢

比如网络请求完成后,在回调结果中,切到主线程异步执行 UI 变更等操作?官网文档没找到相关接口说明。

let httpRequest = http.createHttp(); 
httpRequest.request(// 填写HTTP请求的URL地址,可以带参数也可以不带参数。URL地址需要开发者自定义。请求的参数可以在extraData中指定 
  "EXAMPLE_URL", 
  { 
    // 当使用POST请求时此字段用于传递内容 
    extraData: new ExtraData('data to send'),段性 
  }, 
  (err: BusinessError, data: http.HttpResponse) => { 
    if (!err) { 
    } else { 
      /* 
      比如这种,这里回调是否仍然处于异步子线程呢? 
      如果是的话,怎么切到主线程执行 UI 操作呢 
      */ 
      httpRequest.destroy(); 
    } 
  });
HarmonyOS
2024-08-27 14:27:29
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
FengTianYa

可以尝试封装一下:

@Entry 
@Component 
struct Index { 
  @State message: string = 'Hello World'; 
  loadData(){ 
    test1((data:ESObject)=>{ 
      this.message = data 
    }) 
  } 
  build() { 
    Row() { 
      Column() { 
        Text(this.message) 
          .fontSize(50) 
          .fontWeight(FontWeight.Bold) 
          .onClick(() => { 
            this.loadData() 
            hilog.info(0x0000, 'testTag', 'Test NAPI 2 + 3 = %{public}d', testNapi.add(2, 3)); 
          }) 
      } 
      .width('100%') 
    } 
    .height('100%') 
  } 
} 
async function myAsyncFunction(): Promise<string> { 
  const result: string = await new Promise((resolve: Function) => { 
    setTimeout(() => { 
      resolve('Hello, world!'); 
    }, 3000); 
  }); 
  console.info(result); // 输出: Hello, world! 
  return result; 
} 
async function test1(onDataLoaded: (data:ESObject)=> void){ 
  let a = await myAsyncFunction().then((a)=>{ 
    console.log("xxxx1"+a) 
    return a; 
  }) 
  let data = "xxxx" 
  onDataLoaded(data); 
  console.log("xxxx2"+ a ) 
} 
//网络请求可以考虑这样封装一下 
async function fetchData(onDataLoaded: (data:ESObject)=> void){ 
  let httpRequest = http.createHttp(); 
  httpRequest.request( 
    "EXAMPLE_URL", 
    {}, 
    (err: BusinessError,data:http.HttpResponse)=>{ 
      if (!err) { 
        onDataLoaded(JSON.stringify(data.result)) 
      } 
    } 
  ); 
}
分享
微博
QQ
微信
回复
2024-08-27 17:35:27
相关问题
在C++时,如何阻塞TS主线程
467浏览 • 1回复 待解决
异步是否对主线程有影响
485浏览 • 1回复 待解决
OpenHarmony idl如何实现异步
4672浏览 • 1回复 待解决
ArkTS异步机制与执行顺序
1439浏览 • 1回复 待解决
HarmonyOS ArkTS接口的案例
509浏览 • 1回复 待解决
HarmonyOS ArkTS接口的案例问题
450浏览 • 1回复 待解决
js 怎么开启异步线程?
5992浏览 • 1回复 待解决