是否可以将回调传递给网络工作者?

Nat*_*der 4 javascript web-worker

我有一个渲染工作者,我想通过回调.我知道worker.postMessage方法现在支持Javascript对象,但是当我尝试传递带有对象的函数时,我收到一个错误,告诉我它"无法克隆"该对象.

我还在对象上尝试了JSON.stringify(),并了解到函数没有得到字符串化,因为JSON不支持函数作用域.

有没有办法将回调传递给Web Worker?如果没有,你会如何建议解决这个限制?

我的问题是我在发送动画的同时向工作人员发送消息以启动渲染.所以我需要等到BOTH完成才能执行"回调"

Que*_*tin 7

有没有办法将回调传递给Web Worker?

来自MDN:

Worker接口的postMessage()方法将消息发送到worker的内部作用域.这接受一个参数,即发送给worker的数据.数据可以是由结构化克隆算法处理的任何值或JavaScript对象,其包括循环引用.

而且:

对结构化克隆不起作用的事情

  • 结构化克隆算法无法复制错误和函数对象; 尝试这样做会抛出DATA_CLONE_ERR异常.

所以.你不能传递函数.

我的问题是我在发送动画的同时向工作人员发送消息以启动渲染.所以我需要等到BOTH完成才能执行"回调"

生成唯一ID(例如,与随机数连接的时间戳).存放它.关联您喜欢的任何数据(包括您想要用作回调的函数).将它传递给动画处理程序和Web worker的末尾.

在工作完成后发回该ID.在其中侦听具有该ID的事件,并在您的数据结构中查找.