2010-10-25 14 views
17

Encontré la respuesta algunos de mis problemas, html5 web workers !!!javascript web workers: ¿cómo paso argumentos?

¿Cómo paso un argumento a un trabajador web aunque use este ejemplo básico?

contenido de worker.js:

function doSomething() { 
    postMessage(' done'); 
} 
setTimeout ("doSomething()", 3000); 

js código:

var worker = new Worker('worker.js'); 
    worker.onmessage = function (event) { 
    alert(event.data); 
    }; 
+0

Use setTimeout como lo siguiente: 'setTimeout (doSomething, 3000);' Es mejor porque no hay evaluación adicional en curso ... –

+0

https://developer.mozilla.org/En/Using_web_workers – epascarello

Respuesta

25

Como se puede ver que tiene el mismo mecanismo para los mensajes, tanto principal trabajador-a-y-principal-a trabajador .

  • el método postMessage para enviar mensajes
  • el miembro onmessage para definir el controlador que recibe los mensajes

En el script principal:

worker.postMessage(data); 

En el guión trabajador:

self.addEventListener("message", function(e) { 
    // the passed-in data is available via e.data 
}, false); 

... o simplemente ...

onmessage = function(e) { 
    // the passed-in data is available via e.data 
}; 

Puede ser que los datos tiene que ser una cadena ... (Firefox 3.5 + soporta pasando en objetos compatibles con JSON)

+2

perfecto ¡Gracias! – Joe

+5

@Joe Me alegro de que haya personas que realmente usan las nuevas funciones que no están implementadas en IE :) –

+0

¿Qué hay ahí? en self.addEventListener? –

0
var worker = new Worker(window.App.baseUrl + '/Scripts/signature/GetCurrenProductWorker.js'); 
        worker.postMessage(window.App.baseUrl) 


    var _base_url = '' 
     var xhr = new XMLHttpRequest(); 
     onmessage = function (e) { 
      _base_url = e.data 
      xhr.open("GET", _base_url + "/api/product/Get"); 
      xhr.onload = function() { 
       postMessage(xhr.responseText); 
      }; 
      xhr.send(); 

     }; 

este trabajo para mí

Cuestiones relacionadas