Путаница в настройке переменных

#node.js #variables #discord #discord.js

Вопрос:

Хорошо, это может показаться действительно простым вопросом, но приведенный ниже код продолжает выдавать мне ошибку на консоли. После некоторых исследований кажется, что я, возможно, перепутал настройку переменных, но я не уверен, как это исправить. Для контекста этот модуль предназначен для обновления каналов с помощью статистики сервера. Код:

 function updateStats(client) {
    const Discord = require('discord.js');
    const config = require("../settings/configuration");
    const settings = require("../settings/configuration");
    const guild = client.guilds.cache.get(settings.BOT_SETTINGS.Guild_ID);
    const totalUsers = client.channels.fetch('883654989271154728');
    const onlineUsers = client.channels.fetch('883655041813200926');
    setInterval(function() {
    const interval = (async function() {
        for await (const startTime of setInterval(interval, Date.now())) {
          const now = Date.now();
          console.log(now);
          if ((now - startTime) > 1000)function updateStats(client) {
    const Discord = require('discord.js');
    const config = require("../settings/configuration");
    const settings = require("../settings/configuration");
    const guild = client.guilds.cache.get(settings.BOT_SETTINGS.Guild_ID);
    const totalUsers = client.channels.fetch('883654989271154728');
    const onlineUsers = client.channels.fetch('883655041813200926');
    setInterval(function() {
    const interval = (async function() {
        for await (const startTime of setInterval(interval, Date.now())) {
          const now = Date.now();
          console.log(now);
          if ((now - startTime) > 1000)
            break;
        }
        console.log(Date.now());
      })(); 
      console.log('Getting stats update..')
      var userCount = guild.memberCount;
      var onlineCount = guild.members.filter(m => m.presence.status === 'online').size
      $console.log("Total Users: "   userCount);
      $console.log("Online Users: "   onlineCount);
      totalUsers.setName("Total Users: "   userCount)
      .then(newChannel => console.log(`Stat channel renamed to: ${newChannel.name}`))
      .catch(console.error);
      onlineUsers.setName("Online Users: "   onlineCount)
      .then(newChannel => console.log(`Stat channel renamed to: ${newChannel.name}`))
      .catch(console.error);
      }, 30000)
        }
    module.exports = {
    updateStats
    }
            break;
        }
        console.log(Date.now());
      })(); 
      console.log('Getting stats update..')
      var userCount = guild.memberCount;
      var onlineCount = guild.members.filter(m => m.presence.status === 'online').size
      console.log("Total Users: "   userCount);
      console.log("Online Users: "   onlineCount);
      totalUsers.setName("Total Users: "   userCount)
      .then(newChannel => console.log(`Stat channel renamed to: ${newChannel.name}`))
      .catch(console.error);
      onlineUsers.setName("Online Users: "   onlineCount)
      .then(newChannel => console.log(`Stat channel renamed to: ${newChannel.name}`))
      .catch(console.error);
      }, 30000)
        }
    module.exports = {
    updateStats
    }
 

Ошибка на консоли:

 [Error] An error happened in process: 
ReferenceError: Cannot access 'interval' before initialization
    at /home/container/events/Stats.js:10:51
    at Timeout._onTimeout (/home/container/events/Stats.js:49:9)
    at listOnTimeout (node:internal/timers:557:17)
    at processTimers (node:internal/timers:500:7)
 

Комментарии:

1. Довольно простое сообщение об ошибке. Вы используете это слово interval при определении interval

2. Довольно трудно прочитать код в вашем вопросе без надлежащего отступа. Многие просто пропустят подобные вопросы. Пожалуйста, облегчите чтение вашего кода.

3. Я не думаю, что ты понимаешь setInterval

Ответ №1:

Просто измените const interval = (async function() { на let interval = (async function() { , а затем просто используйте interval = (async function() { вот так:

     let interval = (async function() {
        for await (const startTime of setInterval(interval, Date.now())) {
          const now = Date.now();
          console.log(now);
          if ((now - startTime) > 1000)function updateStats(client) {
    const Discord = require('discord.js');
    const config = require("../settings/configuration");
    const settings = require("../settings/configuration");
    const guild = client.guilds.cache.get(settings.BOT_SETTINGS.Guild_ID);
    const totalUsers = client.channels.fetch('883654989271154728');
    const onlineUsers = client.channels.fetch('883655041813200926');
    setInterval(function() {
    interval = (async function() {