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
)。
这种限制是为了保证任务序列化的安全性。