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

110
Vistas
Función asíncrona que llama a la función externa dos veces en lugar de una vez

Estoy tratando de usar async await en mi código pero tengo algunos problemas. Estoy tratando de iniciar una transacción cada vez que hay un puerto de módem libre. Actualmente, estos son el número de recursos en mi base de datos

puertos abiertos: 1

transacciones en cola: 3

 let ttyUSB0mtnmodem = serialportgsm.Modem(); ussd(ttyUSB0mtnmodem); async function searchForFreePorts() { while (true) { await db.read(); let freePorts = await db.data.mtnPorts.filter(obj => obj.status == "free"); let queuedTrans = await db.data.mtnQueue.filter(obj => obj.status == "queued"); if (freePorts.length > 0) { //if there are any open ports, proceed await freePorts.forEach((port, i) => { if (i < queuedTrans.length) { // if free ports is less than the queued transactions, continue loop console.log("here"); let transaction = queuedTrans[i]; initiateWithdrawal(port, transaction); } }) } await sleep(1000); } } searchForFreePorts(); function initiateWithdrawal(port, transaction) { let dev = port.dev + "mtnmodem"; eval(dev).on('open', async () => { console.log(`\nModem Sucessfully Opened`); //set port status to busy //perform transaction //when done,remove from queued transactions and set port status to free await eval(dev).close(); }) eval(dev).on('close', data => { //whole message data console.log(`Event Close: ` + JSON.stringify(data)); }); eval(dev).open('/dev/' + port.dev, options); }

el problema aquí es que, la primera llamada de iniciarRetiro initiateWithdrawal() abre el módem una vez y realiza la primera transacción correctamente, pero cada vez que se vuelve a llamar, abre el módem dos veces aunque solo un puerto está libre.

registros de la primera llamada

 using : ttyUSB0 mtn Modem Sucessfully Opened

registros de la segunda llamada

 using : ttyUSB0 mtn Modem Sucessfully Opened using : ttyUSB0 mtn Modem Sucessfully Opened

hay algo que estoy haciendo mal?

about 4 years ago · Juan Pablo Isaza
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