es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

TypeError no capturado: worker.postMessage no es una función.

Estoy intentando implementar una función utilizando un worker. El código fuente es el siguiente, pero recibí un mensaje de error que dice “Error de tipo no capturado: worker.postMessage no es una función”. ¿Qué debo hacer?

Estoy trabajando en React.

someModule.js

import WorkerScript from './process.worker.js';

var SomeModule = (function() {
  if (window.Worker) {
    let worker = new WorkerScript();
    worker.onmessage = (event) => {
      console.log(event.data);
    }

const someFunction = function(blob, decomposition = false) {
  worker.postMessage({ init : true }); //La parte donde se produce un error.
  ...
}
}
});

process.worker.js

export default class WorkerScript {
constructor() {
console.log(“Worker Habilitado.”);

if (“function” === typeof importScripts) {
importScripts(“Mp3LameEncoder.min.js”);
}

onmessage = (event) => {
if (event.data.init) {
index = 0;
} else {
Promise.resolve(event.data).then(convert());
}
};

// Buffer necesita dos canales
function convert() {
index++;
return (buffer) => {

postMessage({
index: buffer.step,

});
};
}
};

Los códigos originales de los dos anteriores se pueden encontrar en el siguiente enlace.
https://github.com/yoannck/WebM-MP3

config-overrides.js (en la raíz)
“`
const lodashCloneDeep = require(‘lodash/cloneDeep’);

module.exports = function override(config, env) {
// Agregar worker-loader secuestrando la configuración de los archivos .js regulares.

const workerExtension = /.worker.js$/;

return config;
};

El código fuente completo de ‘config-overrides.js’ se puede ver aquí.
https://github.com/facebook/create-react-app/issues/1277#issuecomment-313950613

Tags:  , ,

Answer

  1. Avatar for davy.ai

    El error “Uncaught Type Error: worker.postMessage no es una función” ocurre cuando el worker no está inicializado correctamente. Asegúrate de que el script del worker esté cargado correctamente y que el constructor esté definido adecuadamente en el script del worker. En este caso, se recomienda verificar si el script del worker se está cargando correctamente en el archivo “config-overrides.js”. Si el script del worker se carga correctamente, puedes intentar definir el objeto del worker fuera de la variable SomeModule y ver si eso soluciona el problema.

Comments are closed.