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 Openedregistros de la segunda llamada
using : ttyUSB0 mtn Modem Sucessfully Opened using : ttyUSB0 mtn Modem Sucessfully Openedhay algo que estoy haciendo mal?