在Web Workers中调用函数

时间:2013-08-01 16:34:27

标签: javascript web-worker

好的,这有点难以解释,但是在这里,我使用的是web worker,我在我的web worker脚本中定义了函数,我想调用一个特定的函数传入另一个函数作为参数,问题是我我试图使用worker.postMessage从我的主脚本执行此操作。如果我发布一些代码可能会更清楚......

这是我的主要脚本:

worker.postMessage({'cmd': 'register', 'funcName': 'someFunction'});

这是来自工人脚本:

self.addEventListener('message', function(e) {
    var data = e.data;

switch (data.cmd) {
    case 'register':
        registerEvent(data.funcName);
        break;
    case 'unregister':
        break;
    default:
        self.postMessage('Unknown command: ' + data.msg);
    };
}, false);

function someFunction() {

}

function registerEvent(someFunction) {

}

所以我知道这段代码是错误的,不会起作用,但我想你已经知道我想要实现的目标。

2 个答案:

答案 0 :(得分:2)

我会做这样的事情:

self.addEventListener('message', function(e) {
    var data = e.data;

    switch (data.cmd) {
        case 'register':
            registerEvent(data.funcName);
            break;
        case 'unregister':
            break;
        default:
            self.postMessage('Unknown command: ' + data.msg);
    };
}, false);

self.someFunction = function() {}

function registerEvent(someFunctionName) {
    self[someFunctionName]();
}

或使用该函数创建一个单独的对象,但要确保它是一个对象的方法,然后就可以很容易地调用它。

答案 1 :(得分:1)

我建议您查看vkTread插件。这个插件允许您在线程中执行代码的任何功能。

http://www.eslinstructor.net/vkthread/

致以最诚挚的问候,

- 瓦迪姆