Необработанный отказ от обещания | команда перезапуска

const { MessageEmbed, Guild } = require("discord.js");
const db = require('quick.db');

module.exports = {
    config: {
        name: "restart",
        category: "moderation",
        aliases: ["r"],
        description: "restarts the bot",
        accessableby: "Administrator",
        usage: "restart",
    },
    run: async (bot, message, args) => {
    if (!message.author.id === '556247341838106624' ) {
        return message.channel.send(`you cant use this!`)
    }
    await message.guild.channels.cache.find(channel => channel.name === "restart").id
   
    process.exit();

        
    }
}

ОШИБКА:

(узел:6772) UnhandledPromiseRejectionWarning: необработанное отклонение обещания. Эта ошибка возникла либо из-за вызова асинхронной функции без блока catch, либо из-за отклонения обещания, которое не было обработано с помощью.catch(). Чтобы завершить процесс узла при отклонении необработанного обещания, используйте флаг CLI --unhandled-rejections=strict(см. https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode).(идентификатор отказа: 1) (узел:6772) [DEP0018] DeprecationWarning: необработанные отклонения обещаний устарели. В будущем необработанные отклонения обещаний завершат процесс Node.js с ненулевым кодом выхода.

1 ответ

Насколько вы знакомы с обещаниями? Обещание может находиться в одном из трех состояний:

  • В ожидании
  • Выполнено
  • Отклонено

    Ожидание - это когда выполняется вычисление (скажем, вы пытаетесь получить что-то из базы данных). Оно не выполнено и не отклонено.
    Выполняется, если операция прошла успешно. Например, были получены данные.
    Отклонено, если что-то пошло не так. Операция не удалась.

    Теперь, оглядываясь назад на предупреждение, оно говорит вам, что скрытые необработанные отклонения обещаний устарели. В будущей версии узла это приведет к сбою вашей программы.

    Есть два способа обработки обещаний. Либо путем связывания.then с обещанием, либо с помощью метода async await.

Сначала посмотрим на метод.then:

somePromise.then((data) => {
  console.log(data);
}).catch((err) => {
  console.error(err.message);
});

В этом примере мы связываем.then(). Catch(); к обещанию. Если обещание выполнено (то есть все прошло хорошо), операция внутри.then () будет выполнена. Если обещание отклонено (что означает, что что-то пошло не так), операция внутри.catch() будет выполнена. Catch() "поймает" ошибку. Тогда вы сможете справиться с этим так, как хотите. (Ошибка, печать на консоли и т. Д.)

Асинхронное ожидание

someFunction = async () => {
  try {
    const somePromise = await someAsyncOperation;
    console.log(somePromise);
  } catch (err) {
    console.log(err.message);
  }
};

Этот пример больше похож на ваш реальный код. Обернув ожидание внутри блока try... catch, мы можем сделать то же самое, что и в первом примере. с помощью catch() компилятор JavaScript имеет способ явно сообщить вам, что пошло не так с операцией.

(Обратите внимание, что я написал последний пример, обернутый в асинхронную функцию. Это потому, что использование ключевого слова await разрешено только внутри функций, помеченных как async, тогда как обычная цепочка.then () может использоваться в любом из них.)

Чтобы ответить на ваш вопрос

Теперь вы должны понять, почему вы получаете предупреждение:

await message.guild.channels.cache.find(channel => channel.name === "restart").id

Если это невозможно найти, JavaScript с радостью объяснит вам, почему. Так что в этом случае вам придется заключить его в блок try..catch (или вместо этого использовать обычный синтаксис обещания).

Вы можете узнать больше об этой очень интересной теме на https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise

Другие вопросы по тегам