web worker不能传递函数,怎么办?动态函数

需求

最近遇到一个需求,需要把用户自定义的函数(不用考虑执行函数的安全性)丢到worker中执行,但是postMessage时不能传递函数,所以要解决这个问题。

办法

解决办法:1、在postMessage时传递foo函数体字符串。2、在子线程接收后用new Function动态函数还原foo函数。

代码如下:

主线程:调用toString()拿到函数体的字符串,然后postMessage传递给子线程。

javascript 复制代码
function foo(a,b){
   console.log(a,b)
}
// 将函数转换为字符串
const fooString = foo.toString();

// 创建 Worker
const worker = new Worker('worker.js');

// 发送函数字符串和参数到 Worker
worker.postMessage({
  functionString: fooString
});

worker线程:拿到函数体字符串后通过new Function还原函数。

javascript 复制代码
self.onmessage = function(e) {
  const { functionString} = e.data;
  
  // 重新创建函数
  const foo = new Function(`return ${functionString}`)();
  
  // 在worker线程中执行函数
  foo.apply(null, [1,2]);
};

后续就可以直接调用这个函数了。

END

相关推荐
pixelpilot1几秒前
微软常用运行库directx修复工具(directx repair)2026版directx下载下载安装教程
java·开发语言·其他·microsoft
cany10003 分钟前
C++进阶 -- std::deque‌ 和 ‌std::list
开发语言·c++
曾几何时`4 分钟前
Go(二)Goroutine及GMP模型
开发语言·后端·golang
AD钙奶-lalala6 分钟前
kotlin反射
android·开发语言·kotlin
老毛肚6 分钟前
jeecgboot vue Pinia 拆分01
前端·javascript·vue.js
2301_789015628 分钟前
Lnux权限
linux·开发语言·c++·权限
江湖中的阿龙10 分钟前
Go语言零基础入门教程(一)环境搭建与基础入门
开发语言·后端·golang
集成显卡8 小时前
Rust实战七 |基于带 colored 颜色文字控制台的批量文件删除工具
开发语言·后端·rust
夜焱辰9 小时前
浏览器端 Agent 的文件版本管理:不用 Git,基于 OPFS + SQLite 自己造了一个
前端·人工智能
梦想的颜色9 小时前
TypeScript 完全指南(下):从类型体操到生产级配置
前端·javascript·typescript