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

时间:2017-05-23 16:17:06

标签: javascript web-worker

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

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

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

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

1 个答案:

答案 0 :(得分:6)

  

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

来自MDN

  

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

also

  

无法使用结构化克隆的东西

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

所以。你不能传递函数。

  

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

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

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