Tiene problemas para prometer setInterval. El .then() está ocurriendo inmediatamente a pesar de que la función embedEditor devuelve una promesa solo si el tiempo === 0. ¿Cómo hago para que una función en setInterval devuelva una promesa una vez que se ha completado un período de tiempo?
const interval = setInterval(embedEditor, 1000); async function embedEditor() { time -= 1; //inner function....// if (time === 0) { clearInterval(interval); return new Promise((res) => { res("time period over"); }); } } await interaction.reply({ embeds: [exampleEmbed], components: [row, row2] }); await interval .then(/*action*/);Respuesta de Fannie Zemlak que funciona de maravilla:
const asyncInterval = async (callback, ms, triesLeft = 5) => { return new Promise((resolve, reject) => { const interval = setInterval(async () => { if (await callback()) { resolve(); clearInterval(interval); } else if (triesLeft <= 1) { reject(); clearInterval(interval); } triesLeft--; }, ms); }); }