在 Web Workers 中调用函数

Jac*_*ack 5 javascript web-worker

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

这是我的主要脚本:

worker.postMessage({'cmd': 'register', 'funcName': 'someFunction'});
Run Code Online (Sandbox Code Playgroud)

这是来自工作脚本:

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) {

}
Run Code Online (Sandbox Code Playgroud)

所以我知道这段代码是错误的并且不起作用,但我想您知道我想要实现的目标。

kal*_*ley 3

我会做这样的事情:

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]();
}
Run Code Online (Sandbox Code Playgroud)

或者用该函数创建一个单独的对象,但要确保它是对象的方法,这样调用就变得很容易。