Foros del Web » Programando para Internet » Node.js »

Por favor expliquenme por que no puede crearse una variable GLOBAL

Estas en el tema de Por favor expliquenme por que no puede crearse una variable GLOBAL en el foro de Node.js en Foros del Web. Hola. Me explican por que la variable VV nunca se crea: Código PHP: var  fs  = require( 'fs' ); fs . writeFile ( './FFFFFFFFF.txt' ,  "Hey there!" ...
  #1 (permalink)  
Antiguo 29/05/2013, 06:28
 
Fecha de Ingreso: febrero-2004
Mensajes: 1.987
Antigüedad: 20 años, 10 meses
Puntos: 22
Por favor expliquenme por que no puede crearse una variable GLOBAL

Hola.

Me explican por que la variable VV nunca se crea:
Código PHP:
var fs = require('fs');
fs.writeFile('./FFFFFFFFF.txt'"Hey there!", function(err) {
    if(
err) {
        
VV=123;
    } else {
        
VV=987;
    }
});
console.log(VV); 
Por el contrario!, la consola emite un ERROR debido a que VV no existe.

Cómo funciona la creación de variables en ese ámbito?

Gracias.
  #2 (permalink)  
Antiguo 29/05/2013, 15:45
Avatar de chwc  
Fecha de Ingreso: julio-2008
Ubicación: Buenos Aires ! :D
Mensajes: 814
Antigüedad: 16 años, 4 meses
Puntos: 103
Respuesta: Por favor expliquenme por que no puede crearse una variable GLOBAL

primero que nada, no declaraste la variable VV fuera de la funcion, ya que esa función se ejecuta fuera del ámbito global.
osea, que antes de ejecutar la escritura del archivo, tendrias que inicializar vv
Código Javascript:
Ver original
  1. var fs = require('fs');
  2. var VV = 0;
  3. fs.writeFile('./FFFFFFFFF.txt', "Hey there!", function(err) {
  4.     if(err) {
  5.         VV=123;
  6.     } else {
  7.         VV=987;
  8.     }
  9. });
  10. console.log(VV);

ahora, tenes otro problema mayor, al hacer escrituras en el disco, las operaciónes son asincronas, es por eso que requieren una funcion que se ejecuta luego de la operación

si ejecutas el codigo que te di, la consola va a mostrar 0, ya que como es asincrono, va a continuar ejecutando el console.log, y v a mostrar 0;
para entenderlo mejor, ejecuta este codigo

Código Javascript:
Ver original
  1. var fs = require('fs');
  2. var VV = 0;
  3. fs.writeFile('./FFFFFFFFF.txt', "Hey there!", function(err) {
  4.     if(err) {
  5.         VV=123;
  6.     } else {
  7.         VV=987;
  8.     }
  9. console.log('respuesta asincrona: '+VV)
  10. });
  11. console.log(VV);
__________________
Hangouts de JavaScript todos los jueves 20hs GMT, Unite !
https://plus.google.com/u/0/108504944676960830886
  #3 (permalink)  
Antiguo 29/05/2013, 18:32
 
Fecha de Ingreso: febrero-2004
Mensajes: 1.987
Antigüedad: 20 años, 10 meses
Puntos: 22
Respuesta: Por favor expliquenme por que no puede crearse una variable GLOBAL

Gracias Chwc
Cita:
Iniciado por chwc Ver Mensaje
no declaraste la variable VV fuera de la funcion
Justamente ESO es lo que intento hacer.

Declarar la variable VV desde la función.

Para LUEGO evaluarla y hacer cosas...

Con JS puede hacerse eso desde funciones, pero no me queda claro por que en NJS no puede hacerse.

Lo que necesito es CAPTURAR la respuesta ASINCRONA para EVALUARLA y dependiendo de su valor, hacer DIFERENTES cosas...
  #4 (permalink)  
Antiguo 30/05/2013, 07:25
Avatar de chwc  
Fecha de Ingreso: julio-2008
Ubicación: Buenos Aires ! :D
Mensajes: 814
Antigüedad: 16 años, 4 meses
Puntos: 103
Respuesta: Por favor expliquenme por que no puede crearse una variable GLOBAL

desde la función la podes declarar como global.VV , ya que global se refiere al objeto global de node.js
pero igual estas haciendo algunas cosas mal, por ejemplo, como vas a debugar el estado de VV justo despues de inicializar la escritura en el disco ??
obviamente te va a tirar «undefined», tendrias que ejecutar un metodo dentro de el callback de fs.writeFile, que se encuentre a nivel global.

un saludo
__________________
Hangouts de JavaScript todos los jueves 20hs GMT, Unite !
https://plus.google.com/u/0/108504944676960830886
  #5 (permalink)  
Antiguo 30/05/2013, 08:28
 
Fecha de Ingreso: febrero-2004
Mensajes: 1.987
Antigüedad: 20 años, 10 meses
Puntos: 22
Respuesta: Por favor expliquenme por que no puede crearse una variable GLOBAL

Cita:
Iniciado por chwc Ver Mensaje
la podes declarar como global.VV
Gracias Chwc, no logro resolverlo colocando GLOBAL al inicio:
Código PHP:
    function QQ(){
        global.
ZZZ=555;
        
console.log(ZZZ);
        }
    
p='COM21';
    
Zerial = require('serialport').SerialPort;
    
Zerial = new Zerial(p,{baudrate:57600}).on('error',QQ);
    
console.log(ZZZ); 
Sé qu epuede "parecer extraño" pero es que necesito evaluar si hay o no hay error.

Por favor indícame cómo hacer "el truco".
  #6 (permalink)  
Antiguo 30/05/2013, 17:13
Avatar de chwc  
Fecha de Ingreso: julio-2008
Ubicación: Buenos Aires ! :D
Mensajes: 814
Antigüedad: 16 años, 4 meses
Puntos: 103
Respuesta: Por favor expliquenme por que no puede crearse una variable GLOBAL

Cita:
Iniciado por Anarko Ver Mensaje
Gracias Chwc, no logro resolverlo colocando GLOBAL al inicio:
Código PHP:
    function QQ(){
        global.
ZZZ=555;
        
console.log(ZZZ);
        }
    
p='COM21';
    
Zerial = require('serialport').SerialPort;
    
Zerial = new Zerial(p,{baudrate:57600}).on('error',QQ);
    
console.log(ZZZ); 
Sé qu epuede "parecer extraño" pero es que necesito evaluar si hay o no hay error.

Por favor indícame cómo hacer "el truco".
mira, tenes Skype ? se me complica mucho escribirlo, si tenes el mio es crumroyal
__________________
Hangouts de JavaScript todos los jueves 20hs GMT, Unite !
https://plus.google.com/u/0/108504944676960830886
  #7 (permalink)  
Antiguo 30/05/2013, 17:46
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años, 7 meses
Puntos: 1485
Respuesta: Por favor expliquenme por que no puede crearse una variable GLOBAL

buenas...

Cita:
Iniciado por Anarko Ver Mensaje
Sé qu epuede "parecer extraño" pero es que necesito evaluar si hay o no hay error.

Por favor indícame cómo hacer "el truco".
creo que @chwc lo explicó bastante bien. el punto va por el tema del mecanismo de sincronización. para que te hagas una idea, ¿has utilizado javascript para desarrollo web? es decir, para html. más o menos, la sincronización es parecido a los eventos en html.

Código:
<button onclick="foo = 'bar';">click</button>
<script>console.log(foo);</script>
¿qué sucede en este fragmento? el intérprete genera error porque la variable foo aún no existe debido a que el evento onclick aún no se ha generado. es decir, primero tiene que ocurrir el evento para que log pueda imprimir el valor en la consola. de forma parecida sucede en nodejs. el console.log de tu código inicial se ejecuta antes del callback crear la variable.

por el contrario, si estuvieras en la consola de nodejs y ejecutaras el código sin el console.log y luego manualmente escribes console.log(VV), verás que el valor se imprime en la consola. esto porque ya ha pasado un tiempo considerable para el callback ejecutarse. por tanto, la solución es mover el console.log dentro del callback.

fíjate que no he añadido nada... solo he parafraseado lo que te explicó @chwc.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.

Última edición por zerokilled; 30/05/2013 a las 18:51 Razón: error en código

Etiquetas: favor, global, variable
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:49.