JavaScript:可以在Web Worker中使用生成器功能吗?

问题描述 投票:0回答:1

我想将一些数据从网络工作者流式传输到父进程。我尝试使用:

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”并从函数声明中删除星号可以使错误消失(但当然可以防止将结果流式传输到父进程)。

有人知道如何在网络工作者中使用生成器吗?其他人在这个问题上可以提供的任何建议,将不胜感激!

javascript function ecmascript-6 generator web-worker
1个回答
0
投票

sef.process()调用生成器将返回一个迭代器,该迭代器具有下一个功能。下一个函数无法发送回主代理并在那里调用,这将破坏代理的分离,因此根本无法完成。您必须在工作程序中使用迭代器,并且仅通过消息发送结果。

© www.soinside.com 2019 - 2024. All rights reserved.