访问箭头函数范围之外的变量

时间:2021-06-19 07:56:54

标签: javascript discord.js

出于某种原因,我无法从设置在其外部的箭头函数内部设置变量。这是使用replit的数据库。当我发送包含嵌入箭头函数的消息时,它可以工作,但它将在单独的嵌入中。

这是我的代码:

    ARDB.list().then(keys => {
      const ARListEmbed = new Discord.MessageEmbed()
        .setColor('#0099ff')

      for (var I=0; I<keys.length; I++) {
        ARDB.get(keys[I]).then(value => {
          ARListEmbed.addField("["+(I+1)+"]"+" "+keys[I], value, true);
        }));
      };

      message.channel.send(ARListEmbed);
    });

任何和所有帮助将不胜感激!

1 个答案:

答案 0 :(得分:0)

感谢您的帮助!但我似乎自己解决了这个问题。

这是以某种方式起作用的代码。

   ARDB.list().then(keys => {
      const Length = keys.length;
      let Index = 0;

      let ARListEmbed = new Discord.MessageEmbed()
        .setColor('#0099ff')
        .setTitle('9NK Discord Server Auto Responses:')
        .setURL('https://www.youtube.com/watch?v=dQw4w9WgXcQ&ab_channel=OfficialRickAstley')

      for (var I=0; I<keys.length; I++) {
        let Key = keys[I];

        ARDB.get(keys[I]).then(value => {
          Index++;

          ARListEmbed.addField("["+(Index)+"]"+" "+Key, value, true);

          if (Index == Length) {
            message.channel.send(ARListEmbed);
          };
        });
      };
    });

此代码有效,因为 Index 可以在箭头函数内更改,并在 for 循环再次循环时保持更改后的值,但在循环之外它说它是原始 self (0)。所以我在 Index == keys length 时发送消息。