2016-10-14 82 views
-2

我有一个全局变量对象,我想将它传递给我的工人。不使用postMessage将数据传递给web worker()

显然,我最好的选择是将该变量对象转换为字符串,然后让我的工作人员将其转换回来,做它的东西,然后将其转换回字符串,并将其传回给我的主线程。

有没有什么办法可以强制对象给工人?没有所有这些转换,或者像下载一些奇怪的东西那样的怪异技巧。

我知道你可以使用setTimeout()创建线程,但这些线程是由同一个内核使用的,而工作人员使用不同的内核。

回答

0

1.看看插件jsonfn。 有了这个插件,您可以用FunctionDateRegex转换对象为字符串,并将其转换字符串返回到类似于常规JSON

var str = JSONfn.stringify(obj);

​​

见活生生的例子和DOC http://www.eslinstructor.net/jsonfn/对象


2.看看插件vkThread。它允许你在一个线程中执行一段代码,而不需要任何Web工作者的技能,只需将一个函数传递给插件即可。

function foo(n, m) { 
    return n + m; 
} 

var param = { 
    fn: foo,  // <-- function to run in a thread; 
    args: [2, 3] // <-- function's arguments; 
}; 

vkthread.exec(param).then(
    function(data){ 
     console.log(data); // <-- prints 5; 
    } 
); 

看到活生生的实例和文档在http://www.eslinstructor.net/vkthread/


setTimeout()不创建一个线程。

+0

第一个解决方案不起作用,给我一些有关转换圆形结构的错误。 –

+0

第二种解决方案也给我一个错误:“Uncaught SecurityError:无法构造'Worker':'blob:file:/// fc35db14-f7db-4579-8e45-8e18c2b7f132'中的脚本无法从原始'file://访问'。“ –

+0

nvm,使用”--args --disable-web-security“标记来禁用安全工作... –