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

206
Vistas
la variable global no se actualiza cuando se cambia el valor en otro archivo nodejs

En nodejs, trato de actualizar la variable global exportada desde otro archivo y verifico el resultado nuevamente. Los valores de la variable en el archivo original y el archivo importado son diferentes.

Ejecuto el archivo test.js y compruebo el resultado. El resultado de gDataChange en DataCommon.js y test.js es diferente aunque es la misma variable.

En DataCommon.js , exporté la variable gDataChange

 let gDataChange = []; function printArray() { console.log('DataCommon.js call ', gDataChange); } function setArray(lArray) { gDataChange = [...lArray]; } module.exports = { gDataChange, printArray, setArray }

En test.js , inserto algunos datos en la matriz global y llamo a la función setArray para cambiarla.

 var { gDataChange, printArray, setArray} = require('../../res/DataCommon.js'); if (!gDataChange.length) { gDataChange.push(1); gDataChange.push(2); gDataChange.push(1); gDataChange.push(3); } function testGlobalVar() { let newData = [...gDataChange]; newData = newData.filter((number)=>{ return number != 1; }); setArray(newData); } testGlobalVar(); console.log('test.js call ', gDataChange); printArray(); setTimeout(() => { console.log(gDataChange); }, 10000);

ingrese la descripción de la imagen aquí

Si usé array.splice() , el gDataChange de 2 archivos es el mismo . Pero si usé array.filter() y reasigné una matriz como la anterior, el gDataChange de 2 archivos es diferente. No estoy seguro de que gDataChange se cree en el nuevo cuando reasigné con array.filter() porque no puedo verificar la dirección de una variable en este caso.

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

0

El sistema de módulos de Node.js es Singleton y almacenamiento en caché de módulos, el sistema de módulos se refiere exactamente al mismo archivo una y otra vez. Por ejemplo:

contador.js

 let value = 0 module.exports = { increment: () => value++, get: () => value, }

aplicación.js

 const counter1 = require('./counter.js') const counter2 = require('./counter.js') counter1.increment() counter1.increment() counter2.increment() console.log(counter1.get()) // prints 3 console.log(counter2.get()) // also prints 3

En tu caso, está sucediendo de la misma manera. Sin embargo, está cambiando la referencia de su matriz gDataChange . Compruebe el siguiente código:

 let arr = [1, 2, 3, 4]; const arr1 = arr.filter(x => x % 2 === 0); // this filter returns new array that refers to the new filtered data. console.log(arr1); // new array const arrOld = arr; // assigned reference of old array to new variable arr = arr1; // assigning filtered data reference to arr console.log(arr, arrOld); // you are seeing this in your code.

Entonces, el cambio en los valores no se debe al nodo, sino a que está cambiando la referencia a los objetos. Así es como funcionan los objetos JS. Incluso cuando asigna los valores de la matriz de filtro, está creando una nueva matriz.

 let gDataChange = []; function printArray() { console.log('DataCommon.js call ', gDataChange); } function setArray(lArray) { gDataChange = [...lArray]; // here a new array reference with filter values are assigned. // now if you change anything in the filter array it won't reflect here. } module.exports = { gDataChange, printArray, setArray }

Puede comprobar cómo se resuelven los módulos de nodo .

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