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

相关推荐
东东2335 分钟前
GeoJSON 介绍:Web 地图数据的通用语言
前端·javascript·json
之恒君5 分钟前
Promise.resolve(x) 等同 new Promise(resolve => resolve(x))?
前端·promise
Tzarevich6 分钟前
JavaScript 原型链:理解对象继承的核心机制
javascript·promise
亮子AI7 分钟前
【Javascript】jsondiffpatch检测到子节点改变了,父节点会标记为改变吗?
开发语言·前端·javascript
caron412 分钟前
C++ 推箱子游戏
开发语言·c++·游戏
JienDa13 分钟前
JienDa聊PHP:PHP从入门到精通—PHP开发入门:从环境搭建到第一个程序
开发语言·php
T___T24 分钟前
写着写着,就踩进了 JavaScript 的小坑
前端·javascript·面试
ERP老兵-冷溪虎山25 分钟前
Python/JS/Go/Java同步学习(第五十篇半)四语言“path路径详解“对照表: 看完这篇定位文件就通透了(附源码/截图/参数表/避坑指南)
java·javascript·python·golang·中医编程·编程四语言同步学·path路径详解
月亮慢慢圆29 分钟前
首字母模糊匹配
前端
一个有理想的摸鱼选手29 分钟前
CesiumLite-在三维地图中绘制3D图形变得游刃有余
前端·gis·cesium