Quiero esperar un error antes de devolver el valor en una función.
Mi código:
async function CheckIfManagerIsInServer(client, server_id, member) { let isIn = { isIn: true, isNotIn: [] }; if (CheckIfIsInChain(server_id)) { database.chains.forEach(chain => { if(chain.membersID.includes(server_id)) { chain.membersID.forEach(async server => { client.guilds.cache.get(server)?.members.fetch(member).catch((err) => { console.log(err) console.log("not exists") isIn.isIn = false; isIn.isNotIn.push(server) console.log(isIn) return; }) }) } }) console.log(isIn) } console.log(isIn) return await Promise.resolve(isIn); }
Como puede ver, hay una trampa. La captura se activa cuando la función ya ha devuelto isIn
. ¿Cómo puedo esperar?
¡Gracias de antemano y perdón por el mal inglés!
use try catch , algo como a continuación
try { await client.guilds.cache.get(server)?.members.fetch(member); } catch(err) { console.log(err) console.log("not exists") isIn.isIn = false; isIn.isNotIn.push(server) console.log(isIn) return; }
Si desea realizar la operación en secuencia, no puede usar forEach de hecho. Simplemente use un bucle for... of moderno en su lugar, en el que await funcionará como se esperaba