Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

144
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!