1

如果我让几分钟没有回答我得到这个错误:

(节点:14012)UnhandledPromiseRejectionWarning:#(节点:14012)UnhandledPromiseRejectionWarning:未处理的承诺拒绝。此错误源于在没有 catch 块的情况下抛出异步函数内部,或拒绝未使用 .catch() 处理的承诺。(拒绝 ID:1)(节点:14012)[DEP0018] DeprecationWarning:不推荐使用未处理的承诺拒绝。将来,未处理的 Promise 拒绝将使用非零退出代码终止 Node.js 进程。

怎么可能修好?我希望回答的时间不受影响。我尝试输入“catch”,但它不起作用。

const Discord = require("discord.js");
const Client = require("../src/structures/client");
module.exports = {
    name: `quiz`,
    aliases: 'q',
    /**
     * @param {Client} client
     * @param {Message} message
     * @param {String[]} args
     */
    run: async (client, message, args) => {
        const preguntas = ['Puedo explicar mis acciones :', 'Las personas no me ven como yo me veo a mi mismo/misma :', 'Pienso en las emociones que conllevan mis acciones : ', "Puedo identificar normalmente mis sentimientos :", "Cada día dedico algo de tiempo a la reflexión", "Puedo mantener la calma, incluso en circunstancias difíciles :", "Soy propenso/propensa a controlar los arrebatos de ira :", "No suelo sentirme desgraciado/desgraciada :", "Me siento calmado y pacífico con las cosas, otras personas o incluso conmigo mismo/misma :", "Suelo controlarme y evitar hacer cosas de las que me arrepiento :", "Generalmente tengo una idea precisa de cómo me perciben las personas con las que interactuo :", "Puedo interactuar con los demás bastante bien :", "Encuentro sencillo entender como se sienten los demás :", "Puedo mostrar empatía y hacer coincidir mis sentimientos con los de otra persona durante una interacción :", "Observo cómo reaccionan los demás para entenderles :", "Admito los errores y me disculpo fácilmente :", "Los demás se sienten bien después de hablar conmigo :", "Puedo reaccionar con calma y sensibilidad ante las emociones de los demás :", "Los demás me respetan y me estiman, incluso cuando no están de acuerdo conmigo :", "Puedo persuadir a los demás para que adopten mi punto de vista. sin coaccionarlos :"];
        const respuestas = `1 ) Nunca
    2 ) Casi nunca
    3 ) A veces
    4 ) Usualmente
    5 ) Siempre`
        const time = 50;
        var autoconciencia = [];
        var autogestion = [];
        var concienciasocial = [];
        var relaciones = [];
        var i = 0;

        function resultados(array1, array2, array3, array4) {
            var resultado_autoconciencia = 0;
            var resultado_autogestion = 0;
            var resultado_concienciasocial = 0;
            var resultado_relaciones = 0;
            var evaluacion;
            for (var i = 0; i < array1.length; i++) {
                resultado_autoconciencia = resultado_autoconciencia + array1[i]
            }
            for (var i = 0; i < array2.length; i++) {
                resultado_autogestion = resultado_autogestion + array2[i]
            }
            for (var i = 0; i < array3.length; i++) {
                resultado_concienciasocial = resultado_concienciasocial + array3[i]
            }
            for (var i = 0; i < array4.length; i++) {
                resultado_relaciones = resultado_relaciones + array4[i]
            }
            if (resultado_autoconciencia < 17 || resultado_autogestion < 17 || resultado_concienciasocial < 17 || resultado_relaciones < 17) {
                evaluacion = "Lo sentimos, no has conseguido el rol-SOPORTE";
            } else {
                evaluacion = "Enhorabuena!!!, has conseguido el rol-SOPORTE";
                // console.log(message.guild.roles);
                // console.log(message.guild.roles.cache.find(r => r.name === 'SOPORTE'));
                let role = message.guild.roles.cache.find(r => r.name === 'SOPORTE');
                if (role) message.member.roles.add(role);
            }
            return {
                resultado_autoconciencia,
                resultado_autogestion,
                resultado_concienciasocial,
                resultado_relaciones,
                evaluacion
            };
        }

        function pusharrays(reaction, array) {
            switch (reaction) {
                case '1️⃣':
                    array.push(1);
                    break;
                case '2️⃣':
                    array.push(2);
                    break;
                case '3️⃣':
                    array.push(3);
                    break;
                case '4️⃣':
                    array.push(4);
                    break;
                case '5️⃣':
                    array.push(5);
                    break;
            }
        }
        nextquestion(i);

        function nextquestion(i) {
            if (i < preguntas.length) {
                message.channel.send(new Discord.MessageEmbed().setAuthor(`${i+1}: ${preguntas[i]}`, message.client.user.avatarURL).setDescription(`${respuestas}`).setColor('#ffdb26')).then(async msg => {
                    await msg.react('1️⃣');
                    await msg.react('2️⃣');
                    await msg.react('3️⃣');
                    await msg.react('4️⃣');
                    await msg.react('5️⃣');
                    const filter = (reaction, user) => {
                        return ['1️⃣', '2️⃣', '3️⃣', '4️⃣', '5️⃣'].includes(reaction.emoji.name) && !user.bot;
                    };
                    msg.awaitReactions(filter, {
                        max: 1,
                        time: time * 1000,
                        errors: ['time']
                    }).then(collected => {
                        var reaction = collected.first().emoji.name;
                        var challanger = collected.first().users.cache.last();
                        if (reaction) {
                            if (i == 0 || i == 1 || i == 2 || i == 3 || i == 4) {
                                pusharrays(reaction, autoconciencia);
                                i++;
                                nextquestion(i);
                            } else if (i == 5 || i == 6 || i == 7 || i == 8 || i == 9) {
                                pusharrays(reaction, autogestion);
                                i++;
                                nextquestion(i);
                            } else if (i == 10 || i == 11 || i == 12 || i == 13 || i == 14) {
                                pusharrays(reaction, concienciasocial);
                                i++;
                                nextquestion(i);
                            } else if (i == 15 || i == 16 || i == 17 || i == 18 || i == 19) {
                                pusharrays(reaction, relaciones);
                                i++;
                                nextquestion(i);
                            }
                        }
                    })
                })
            } else {
                let resultado = resultados(autoconciencia, autogestion, concienciasocial, relaciones);
                message.channel.send(new Discord.MessageEmbed().setColor('#ffdb26').setThumbnail("https://cdn.discordapp.com/icons/814901488726835261/19e955580ad014d50ec8fde47669696f.webp").setTitle(`${resultado.evaluacion}`).addField("PUNTAJE AUTOCONCIENCIA : ", `${resultado.resultado_autoconciencia}`).addField("PUNTAJE AUTOGESTIÓN : ", `${resultado.resultado_autogestion}`, " ", " ").addField("PUNTAJE CONCIENCIA SOCIAL : ", `${resultado.resultado_concienciasocial}`).addField("PUNTAJE RELACIONES : ", `${resultado.resultado_relaciones}`).setFooter("por: ꧁BOT_DESPACHO_D꧂&quot;, 'https://cdn.discordapp.com/icons/814901488726835261/19e955580ad014d50ec8fde47669696f.webp')).then(async msg => {
                    await msg.react('');
                    const filter = (reaction, user) => {
                        return [''].includes(reaction.emoji.name) && !user.bot;
                    };
                    msg.awaitReactions(filter, {
                        max: 1,
                        time: time * 1000,
                        errors: ['time']
                    }).then(collected => {
                        var reaction = collected.first().emoji.name;
                        var challanger = collected.first().users.cache.last();
                        if (reaction == "") {
                            message.channel.bulkDelete(22);
                        }
                    })
                })
            }
        }
    }
}
4

1 回答 1

2

在您“让几分钟没有回答”之后收到错误,因为您是这么说的。

在您的收集器选项( { time: time * 1000, errors: ['time'] }) 中,您设置了 timeout 导致 promise 被拒绝的原因之一。如果几秒钟后没有收集到消息time,则拒绝该承诺。由于没有 catch 块,您将收到您提到的错误。

所以,添加那些catches:

msg
  .awaitReactions(filter, {
    max: 1,
    time: time * 1000,
    errors: ['time'],
  })
  .then((collected) => {
    var reaction = collected.first().emoji.name;
    var challanger = collected.first().users.cache.last();
    if (reaction) {
      // ...
    }
  })
  .catch((collected) => {
    console.log(
      `After ${time} seconds ${collected.size} reaction is collected.`,
    );
  });

// ...

msg
  .awaitReactions(filter, {
    max: 1,
    time: time * 1000,
    errors: ['time'],
  })
  .then((collected) => {
    var reaction = collected.first().emoji.name;
    var challanger = collected.first().users.cache.last();
    if (reaction == '') {
      message.channel.bulkDelete(22);
    }
  })
  .catch((collected) => {
    console.log(
      `After ${time} seconds ${collected.size} reaction is collected.`,
    );
  });
于 2021-03-13T20:48:10.967 回答