Tengo un webworker que hace algo de computación larga. para poder obtener el progreso del trabajador, quiero enviar el progreso del trabajador web a través de MessageChannel al script principal. así que en el archivo principal empiezo y escucho al webworker así.
var channel=new MessageChannel(); sunAnalysisWorker.onmessage = function (e) { console.log("messageport message", e.ports) setSensorValues(e.data) } sunAnalysisWorker.postMessage({ meshPlanes: meshPlanesTransferable, sceneMesh: inputContextCopy, scenarioMesh: inputScenarioCopy, hours: hours, days: days, months: months, rays: { origins, directions, }, },[channel.port1]))el trabajador web se ve así:
self.addEventListener( 'message', async function (e) { let normalizedValues = 0 // do a lot of work ---> e.ports[0].postMessage("test") self.postMessage(normalizedValues) } )hacer eso me da dos problemas que no sé cómo resolver:
DOMException no detectada: no se pudo ejecutar 'postMessage' en 'Worker': el puerto en el índice 0 ya está neutralizado.
así que hay algo bastante mal, pero no puedo entender qué. hay alguien con una idea? ¡Muchas gracias!