Javascript Web工作者中的函数调用
好的,这有点难以解释,但我使用的是web workers,我的web workers脚本中定义了一些函数,我想调用一个特定的函数作为参数传入另一个函数,问题是我正试图使用worker.postMessage从主脚本执行此操作。如果我发布一些代码可能会更清楚 这是我的主要剧本:Javascript Web工作者中的函数调用,javascript,web-worker,Javascript,Web Worker,好的,这有点难以解释,但我使用的是web workers,我的web workers脚本中定义了一些函数,我想调用一个特定的函数作为参数传入另一个函数,问题是我正试图使用worker.postMessage从主脚本执行此操作。如果我发布一些代码可能会更清楚 这是我的主要剧本: worker.postMessage({'cmd': 'register', 'funcName': 'someFunction'}); 这来自工作脚本: self.addEventListener('message',
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) {
}
因此,我知道这段代码是错误的,不起作用,但我想你知道我要实现什么。我会这样做:
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]();
}
或者使用该函数创建一个单独的对象,但要确保它是对象的方法,这样调用就很容易了。我建议您查看插件。该插件允许您在线程中执行代码的任何功能 致以最良好的祝愿
--Vadim非常感谢,如果我有20多个函数,那么使用一个对象和20个方法它会变得冗长吗?我不这么认为。它更像是一本索引词典,而不是其他任何东西。如果你担心它会变得杂乱无章,你可以随时考虑使用。我应该在service worker或页面中附加的js文件中在哪里编写此函数?我建议这是最好的方法+1给你瓦迪姆克