Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

226
Visualizações
¿Cómo recuperar el valor de process.on en nodejs?

El código actual que estoy usando:

 async function MainFunction(){ let arrOO; process.on('message', (jData) => { let sName; if(jData.koota){ sName = jData.koota[0] } console.log(sName + ' hello!') arrOO = sName }) console.log(arrOO + ' calling outside of .on') }

Estoy intentando imprimir jData.koota[0] que está asignado a sName para que pueda usarse en toda la función. En este caso, fuera del proceso.on, quiero imprimirlo. Cuando se ejecuta este código, se devuelve 'indefinido' en console.log(arrOO + ' calling outside of .on') . ¿Cómo llamaría a sName fuera de process.on?

about 4 years ago · Santiago Gelvez
1 Respostas
Responde à pergunta

0

process.on() simplemente instala un detector de eventos e inmediatamente regresa, por lo que su console.log() se ejecuta ANTES de que ocurra cualquier evento. process.on() se conoce como no bloqueante. Eso significa que hace un trabajo inicial y luego regresa inmediatamente y los datos reales llegan un tiempo después cuando llama a su devolución de llamada.

Por lo tanto, su console.log() solo está intentando ver los datos antes de que se hayan ingresado allí. Tenga en cuenta que la mayoría de las veces, cuando intenta asignar una variable de mayor alcance desde una función de devolución de llamada asincrónica, es probable que se trate de un error de codificación porque el código en el mayor alcance no tendrá idea de cuándo acceder a esos datos.

Para cualquier código que quiera saber sobre esos mensajes de proceso, debe colocar ese código dentro de la devolución de llamada process.on() o ponerlo en una función a la que llama desde dentro de esa devolución de llamada. Esa es la ÚNICA forma en que sabrá cuándo se ha producido un mensaje entrante y cuándo hay algunos datos disponibles.

Aquí hay una opción:

 function MainFunction(){ process.on('message', (jData) => { let sName; if(jData.koota){ sName = jData.koota[0]; // call some function and pass it the new data newDataArrived(sName) } }); } // this function gets called when we have a new sName function newDataArrived(sName) { // put code here that uses the data console.log(sName); }

O bien, puede convertirlo en una interfaz basada en promesas que resuelva una promesa en el próximo evento coincidente que obtenga:

 function MainFunction() { return new Promise(resolve => { function messageHandler(jData) { if (jData.koota) { resolve(jData.koota); // remove message listener so they don't pile up // since a promise is a one-shot device, we can // only use this promise once process.off('message', messageHandler); } } process.on('message', messageHandler); }); } Mainfunction().then(sName => { // use sName here });
about 4 years ago · Santiago Gelvez Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda