Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

151
Vistas
JS: constantes para números mágicos en el contexto del trabajador del servicio

Tengo una extensión de trabajador de servicio que usa muchos valores y definiciones codificados. Por ejemplo, tenemos un protocolo propietario que define ciertos tipos de mensajes que se identifican con números enteros:

 const MsgType = { MSG_TYPE_1: 0, // not really called like this, just an example MSG_TYPE_2: 1 };

Según tengo entendido, no se puede confiar en variables globales en los trabajadores de servicios. Como tal, usar constantes para valores codificados no funcionará. JS no tiene ninguna otra forma de establecer dichos valores codificados.

Solo puedo pensar en tres formas de lidiar con esto:

1- Solo use valores codificados en todo su código. me niego a hacer esto....

2- usar funciones para devolver el valor como

 function MsgType() { return { MSG_TYPE_1: 0, MSG_TYPE_2: 1 } }

3- reemplace const con let y haga que una función reinicie todo:

 let MsgType = null; function setEveryConstantEverywhere() { if (MsgType != null) { return; } // set everything } // in code where SW is expected to wake up then call setEveryConstantEverywhere right at the start.

¿Hay otra manera? ¿Estoy entendiendo todo esto mal?

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Bien, realicé algunas pruebas empíricas y ahora tengo una mejor comprensión.

1- Cada vez que se vuelve a cargar el trabajador del servicio de extensión, se evalúa el contexto global completo ANTES de que se invoquen los controladores de eventos. Esto implica que las constantes globales se están redefiniendo

2- Se puede incluir una referencia a un objeto y estará disponible en el controlador de eventos. Sin embargo, si el SW se ha reiniciado, la referencia será a la instancia recién creada y no a la configurada antes de reiniciar:

 const obj = {/*...*/}; chrome.webRequest.onBeforeRequest.addListener((context => _ => { context === obj; // true })(obj) ,/*...*/);

Intuitivamente, uno pensaría que la instancia del controlador de eventos que se llama es la que se estableció antes de detener el SW, sin embargo, esto no es así. De hecho, parece que todo se borra por completo, luego se inicializa el SW (ejecuta todo el código en el ámbito global) y solo entonces se envía el evento.

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda