Worker
======

La interfaz **`Worker`** de la API de Web Workers representa una tarea en segundo plano que se puede crear a través de un script, que puede enviar mensajes a su creador.

La creación de un *worker* se realiza llamando al constructor `Worker("path/to/worker/script")`.

Los *workers* pueden generar nuevos *workers*, siempre y cuando esos *workers* estén alojados en el mismo origen que la página principal. (Nota: los trabajadores anidados aún no están implementados en WebKit).

No todas las interfaces y funciones están disponibles (en-US) para scripts dentro de un `Worker`. Los *workers* pueden usar `XMLHttpRequest` para la comunicación de red, pero sus atributos `responseXML` y `channel` son siempre `null`. (`fetch` también está disponible, sin tales restricciones).

EventTarget

WorkerConstructor
-----------

`Worker()` (en-US)

Crea un *worker* web dedicado que ejecuta el script en la URL especificada. Esto también funciona para Blob URLs.

Propiedades de instancia
------------------------

*Hereda las propiedades de su padre, `EventTarget`.*

Métodos de instancia
--------------------

*Hereda los métodos de su padre, `EventTarget`.*

`Worker.postMessage()` (en-US)

Envía un mensaje, que consta de cualquier objeto de JavaScript, al ámbito interno del *worker*.

`Worker.terminate()`

Termina inmediatamente el *worker*. Esto no permite que el *worker* finalice sus operaciones; se detiene de una vez. Las instancias de `ServiceWorker` (en-US) no admiten este método.

Eventos
-------

`error` (en-US)

Se activa cuando se produce un error en el *worker*.

`message` (en-US)

Se activa cuando el padre del *worker* recibe un mensaje de ese *worker*.

`messageerror` (en-US)

Se activa cuando un objeto `Worker` recibe un mensaje que no puede ser deserializado (en-US).

`rejectionhandled` (en-US)

Se activa cada vez que se rechaza una `Promesa`, independientemente de si hay o no un controlador para capturar el rechazo.

`unhandledrejection` (en-US)

Se activa cuando una `Promesa` se rechaza sin un controlador para detectar el rechazo.

Ejemplo
-------

El siguiente fragmento de código crea un objeto `Worker` usando el constructor `Worker()` (en-US), luego usa el objeto *worker*:


```js
const myWorker = new Worker("/worker.js");
const first = document.querySelector("input#number1");
const second = document.querySelector("input#number2");

first.onchange = () => {
  myWorker.postMessage([first.value, second.value]);
  console.log("Mensaje enviado al worker");
};
```


Para ver un ejemplo completo, consulte nuestro Ejemplo básico de un *worker* dedicado (ejecutar *worker* dedicado).

Especificaciones
----------------

| Specification |
| --- |
| HTML Standard # dedicated-workers-and-the-worker-interface |

Compatibilidad con navegadores
------------------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

El apoyo varía para los diferentes tipos de *workers*. Consulte la página de cada tipo de trabajador para obtener información específica.

### Comportamiento de error del worker de origen cruzado

En las primeras versiones de la especificación, la carga de un script de *worker* de origen cruzado generaba un `SecurityError`. Hoy en día, en su lugar, se lanza un evento `error` (en-US).

Véase también
-------------

* Usando Web Workers
* Funciones y clases disponibles para Web Workers (en-US)
* Otro tipo de *workers*: `SharedWorker` (en-US) y Service Worker.
* Interfaz `OffscreenCanvas` (en-US).