HarmonyOS 鸿蒙Next中taskpool报错TypeError: Not support eval. Forbidden using new Function()/Function()

HarmonyOS 鸿蒙Next中taskpool报错TypeError: Not support eval. Forbidden using new Function()/Function()

使用官方demo和别人写的正常demo均报错

let task1: taskpool.Task = new taskpool.Task(additionDelay, 5000);
let task2: taskpool.Task = new taskpool.Task(additionDelay, 2000);
let task3: taskpool.Task = new taskpool.Task(additionDelay, 4000);
let runner: taskpool.SequenceRunner = new taskpool.SequenceRunner();
runner.execute(task1).then(() => {
  console.log(`task1 done`)
})
runner.execute(task2).then(() => {
  console.log(`task2 done`)
})
runner.execute(task3).then(() => {
  console.log(`task3 done`)
})
@Concurrent
export async function additionDelay(delay: number) {
  let start: number = new Date().getTime();
  while (new Date().getTime() - start < delay) {
    continue;
  }
}

更多关于HarmonyOS 鸿蒙Next中taskpool报错TypeError: Not support eval. Forbidden using new Function()/Function()的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

鸿蒙Next中taskpool报错是因为ArkTS限制了动态代码执行能力。具体表现为不支持eval()Function()等动态执行方法。taskpool作为鸿蒙的并发任务库,在执行任务时禁止使用这些动态代码评估功能。该限制是鸿蒙系统出于安全考虑的设计决策。解决方案是改用静态代码实现任务逻辑,避免在taskpool任务中使用任何形式的动态代码执行。

更多关于HarmonyOS 鸿蒙Next中taskpool报错TypeError: Not support eval. Forbidden using new Function()/Function()的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


这个错误是因为在HarmonyOS Next中,taskpool.Task的构造函数不支持直接传递函数引用。根据错误信息"Not support eval",系统禁止了通过Function()eval()动态创建函数的方式。

正确的做法是:

  1. 确保你的并发函数(如additionDelay)使用了@Concurrent装饰器。
  2. 将函数定义在单独的文件中并导出。
  3. 通过字符串形式引用函数名而不是直接传递函数引用。

修改后的代码应该类似这样:

// 在单独文件中定义并导出
@Concurrent
export async function additionDelay(delay: number) {
  // 函数实现
}

// 使用时
let task1 = new taskpool.Task("additionDelay", 5000);  // 注意这里是字符串形式

关键点:

  • 函数名必须以字符串形式传递。
  • 函数必须用@Concurrent装饰。
  • 函数需要在全局作用域可访问(通常是导出后import)。

这种限制是为了保证任务序列化的安全性。

回到顶部