Saltar al contenido

¿Puedo pasar parámetros a la función .js cuando creo el nuevo objeto Web Workers?

Solución:

No he usado muchos trabajadores web, pero según esta descripción, creo que podría hacerlo de esta manera:

var worker = new Worker("sample.js");
worker.postMessage({ "args": [ ] });

Luego, en sample.js, estructúrelo de esta manera:

self.addEventListener("message", function(e) {
  var args = e.data.args;
  // do whatever you need with the arguments
}, false);

Esto no es lo mismo que pasar un argumento tradicional, ya que todo lo que vaya en postMessage debe ser formateado como JSON (por ejemplo, sin funciones). Sin embargo, existe una posibilidad decente de que pueda hacer lo que necesita que haga.

Pregunta

¿Cómo puedo pasar los parámetros sample.js cuando lo uso como una web que funciona así? var w = new Worker("./Scripts/sample.js"); ?

Respuesta

Puede pasar argumentos en la cadena de consulta y en sample.js obtener los argumentos de location.search. No es necesario llamar a postMessage para lograr esto.

Código de ejemplo

El código de llamada sería

var w = new Worker("./Scripts/sample.js?answer=42&question=ultimate");

Esto llamará al trabajador. En sample.js location.search será igual ?answer=42&question=ultimate. Podemos usar el siguiente código para sacarlo con gracia

var parameters = {}
location.search.slice(1).split("&").forEach( function(key_value) { var kv = key_value.split("="); parameters[kv[0]] = kv[1]; })

var question = parameters['question'];
var answer = parameters['answer'];

Ejemplo en vivo

Puedes ver un ejemplo en vivo aquí.

Pensamientos finales

Si tienes un grande cantidad de datos para enviar, no use la cadena de consulta.

2018-julio

location está disponible en WebWorkers (según MDN), que abre location.hash, location.search, e incluso location.pathname como formas de transmitir información. (Probado en Mac OSX en Chrome, Safari, FireFox)

Además, los argumentos hash y de consulta funcionaron en Chrome y FireFox para URL.createObjectURL(Blob([src])), pero no Safari.

(Disculpas por la necropublicación; ¡los resultados de la búsqueda son para siempre!)

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *