HarmonyOS鸿蒙Next中使用TaskPool时出现报错:1.taskpool: failed to serialize arguments 2.Unsupport serialize object type: Proxy

HarmonyOS鸿蒙Next中使用TaskPool时出现报错:1.taskpool: failed to serialize arguments 2.Unsupport serialize object type: Proxy

@state @prop修饰的对象,作为参数传递给 task时报错:

[ecmascript] Unsupport serialize object type: Proxy
[ecmascript] ValueSerialize: serialize data is incomplete
(GenerateTaskInfo)] taskpool: failed to serialize arguments.

相关代码如下:

@State defaultAssetUrl: Resource = $r(‘app.media.ic_launcher’);
let request: RequestJobRequest = {
src: defaultAssetUrl
}
let task = new taskpool.Task(requestJob, request)
taskpool.execute(task).then((res: Object).{}


更多关于HarmonyOS鸿蒙Next中使用TaskPool时出现报错:1.taskpool: failed to serialize arguments 2.Unsupport serialize object type: Proxy的实战教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

taskpool不支持@State@prop修饰的复杂类型对象,相关示例代码去掉@State就可以了

可以参考一下taskpool注意事项中的第四条

https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/taskpool-introduction#taskpool

更多关于HarmonyOS鸿蒙Next中使用TaskPool时出现报错:1.taskpool: failed to serialize arguments 2.Unsupport serialize object type: Proxy的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS Next中,TaskPool报错"failed to serialize arguments"和"Unsupport serialize object type: Proxy"是因为TaskPool要求传递的参数必须可序列化。Proxy对象无法被序列化传输。解决方法:确保传递给TaskPool的任务参数是基本数据类型、普通对象或可序列化的类实例。避免直接传递Proxy、函数等不可序列化的对象。需要重构代码,将Proxy对象转换为普通对象后再传递。

在HarmonyOS Next中使用TaskPool时,@State/@Prop修饰的对象会被转为Proxy代理对象,而TaskPool目前不支持直接传递Proxy对象作为参数。建议的解决方案:

  1. 将需要传递的数据转换为普通对象:
let plainRequest = {
  src: defaultAssetUrl.id // 获取Resource的实际ID值
}
let task = new taskpool.Task(requestJob, plainRequest)
  1. 或者使用JSON序列化:
let request = JSON.parse(JSON.stringify({
  src: defaultAssetUrl
}))
let task = new taskpool.Task(requestJob, request)
  1. 对于Resource对象,建议直接传递其标识符而非对象本身。

这是因为TaskPool需要跨线程传递数据,必须确保参数是可序列化的基本类型或简单对象。Proxy对象包含无法序列化的元信息,会导致序列化失败。

回到顶部