quiero devolver el valor después del ciclo for pero por alguna razón lee el valor antes del ciclo
client.on('friendMessage', (steamID, message) => { var cmd; if(cmd = message.match(/^!amount (\D+)/)) { var item_idz = cmd[1]; console.log(amnt(item_idz)) } }); function amnt(item_idz,steamID) { manager.getUserInventoryContents("[U:1:1227885041]", 440, 2, true, (err, inventory) => { if(err) { console.log("coś sie zepsuć"); } else { var ew = 0; for(var p = 0; p< inventory.length; p++) { if(inventory[p].name == item_idz) { ew++; console.log(ew) } } if(steamID != null) { client.chatMessage(steamID, ew.toString()); } else { return ew; } } }); }salida: 7656119884397**** dijo !amount Crimson Cache Case undefined 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
Este console.log muestra undefined porque usa la devolución de llamada y amnt append en la pila de eventos de javascript hasta que finaliza el proceso
Por otro lado, la función amnt no devuelve nada porque ejecuta la función de devolución de llamada y no devuelve nada
Prueba este código para imprimir datos:
if(cmd = message.match(/^!amount (\D+)/)) { var item_idz = cmd[1]; amnt(item_idz, (error, data) => console.log(data)); } function amnt(item_idz, steamID, next) { manager.getUserInventoryContents('[U:1:1227885041]', 440, 2, true, (err, inventory) => { if (err) { console.log('coś sie zepsuć'); } else { var ew = 0; for (var p = 0; p < inventory.length; p++) { if (inventory[p].name == item_idz) { ew++; console.log(ew); } } if (steamID != null) { client.chatMessage(steamID, ew.toString()); next(null); } else { next(null, ew); } } }); }