我有一个渲染工作者,我想传递一个回调。我知道worker.postMessage方法现在支持Javascript对象,但是当我尝试传递带有对象的函数时,我收到一个错误,告诉我它“无法克隆”该对象。
我还在对象上尝试了JSON.stringify(),并了解到函数没有得到字符串化,因为JSON不支持函数范围。
有没有办法将回调传递给Web Worker?如果没有,你会如何建议解决限制?
我的问题是我在发布动画的同时向工作人员发送消息以启动渲染。所以我需要等到BOTH完成才能执行“回调”
答案 0 :(得分:6)
有没有办法将回调传递给Web Worker?
来自MDN:
Worker接口的postMessage()方法向worker的内部作用域发送消息。这接受一个参数,即发送给worker的数据。数据可以是结构化克隆算法处理的任何值或 JavaScript对象,其中包括循环引用。
also:
无法使用结构化克隆的东西
- 结构化克隆算法无法复制错误和函数对象;尝试这样做会抛出DATA_CLONE_ERR异常。
所以否。你不能传递函数。
我的问题是我在发布动画的同时向工作人员发送消息以启动渲染。所以我需要等到BOTH完成才能执行“回调”
生成唯一ID(例如,与随机数连接的时间戳)。存放它。关联您喜欢的任何数据(包括您想要用作回调的函数)。将它传递给动画处理程序和Web worker的结尾。
工作完成后发回该ID。在其中侦听具有该ID的事件,并在您的数据结构中查找。