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
鸿蒙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()动态创建函数的方式。
正确的做法是:
- 确保你的并发函数(如additionDelay)使用了@Concurrent装饰器。
- 将函数定义在单独的文件中并导出。
- 通过字符串形式引用函数名而不是直接传递函数引用。
修改后的代码应该类似这样:
// 在单独文件中定义并导出
@Concurrent
export async function additionDelay(delay: number) {
  // 函数实现
}
// 使用时
let task1 = new taskpool.Task("additionDelay", 5000);  // 注意这里是字符串形式
关键点:
- 函数名必须以字符串形式传递。
- 函数必须用@Concurrent装饰。
- 函数需要在全局作用域可访问(通常是导出后import)。
这种限制是为了保证任务序列化的安全性。
 
        
       
                   
                   
                  

