HarmonyOS TaskPool当执行的函数是个异步函数时就没有返回值

我做了个简单的demo。changeStr函数当直接返回str时正常

HarmonyOS TaskPool当执行的函数是个异步函数时就没有返回值 -鸿蒙开发者社区

HarmonyOS
2024-12-27 15:04:34
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
superinsect

请参考以下代码:

import { taskpool, Stack } from '@kit.ArkTS'

@Concurrent
async function changeStr(str: string): Promise<string> {
  let res = await Promise.resolve(str)
  return res
}


@Entry
@Component
struct Index {
  @State str: string = 'a';

  async go() {
    try {
      const task = new taskpool.Task(changeStr, 'b')
      const str = await taskpool.execute(task)
      console.log('msTag', str)
      this.str += str
    } catch (e) {
      console.error('msErrTag', e)
    }
  }

  build() {
    Row() {
      Column() {
        Text(this.str)
          .fontSize(50)
          .fontWeight(FontWeight.Bold)
        Button('change')
          .onClick(() => this.go())
          .width('100%')
      }
      .height('100%')
    }
  }
}

taskpool一般使用场景是需要设置优先级的任务、需要频繁取消的任务、大量或者调度点较分散的任务。

比如批量上传多张图片,开使用taskpool开辟多个task来执行。你的使用场景是用taskpool来执行一个异步函数,taskpool也是支持的,异步函数返回的是promise,所以taskpool.execute需要用await来修饰或者用taskpool.execute().then来接收回调。

像截图中网络请求,如果当前页面只有一个网络请求,是没有必要用taskpool的,如果该页面同时有多个请求,并且可能优先级、串行、取消等操作,是可以用taskpool的。详细文档可参考:

https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-taskpool-V5

分享
微博
QQ
微信
回复
2024-12-27 17:03:39
相关问题
HarmonyOS Promise函数返回值问题
597浏览 • 1回复 待解决
HarmonyOS crypto-js加密没有返回值
443浏览 • 1回复 待解决
HarmonyOS TextPickerDialog返回值问题
694浏览 • 1回复 待解决
HarmonyOS onBackPress返回值问题
290浏览 • 1回复 待解决
求助:关于HTTP返回值问题
3162浏览 • 1回复 待解决
HarmonyOS 每秒执行一次函数
560浏览 • 2回复 待解决
event.data.isRequestGesture()返回值问题
1313浏览 • 1回复 待解决