我想将一些数据从网络工作者流式传输到父进程。我尝试使用:
var s = `
self.onmessage = function(event) {
postMessage(self.process(event.data))
};
self.process = function* (n) {
for (var i=0; i<n; i++) yield i;
}
`
var blob = new Blob([s], {type: 'application/javascript'});
var worker = new Worker(URL.createObjectURL(blob));
worker.onmessage = e => {console.log('got back', e.data)}
worker.postMessage(7);
但是这会抛出Uncaught DOMException: Failed to execute 'postMessage' on 'DedicatedWorkerGlobalScope': [object Generator] could not be cloned.
。用“ return”替换“ yield”并从函数声明中删除星号可以使错误消失(但当然可以防止将结果流式传输到父进程)。
有人知道如何在网络工作者中使用生成器吗?其他人在这个问题上可以提供的任何建议,将不胜感激!
用sef.process()
调用生成器将返回一个迭代器,该迭代器具有下一个功能。下一个函数无法发送回主代理并在那里调用,这将破坏代理的分离,因此根本无法完成。您必须在工作程序中使用迭代器,并且仅通过消息发送结果。