首页 > 解决方案 > embed 永远不会在 .then() 中添加字段

问题描述

我有一个函数 generateEmbed,它根据 id 获取用户,然后创建一个嵌入字段以添加到嵌入中。目前这实际上并未向嵌入添加字段。

有问题的功能:

function generateEmbed(startIndex, listOfPrompts, event) {
  const currentPage = listOfPrompts.slice(startIndex, startIndex + pageLength);

  const embed = new Discord.MessageEmbed()
  .setTitle(`Writing prompts ${startIndex + 1}-${startIndex + currentPage.length} out of ${listOfPrompts.length}`);

  currentPage.forEach(prompt => {
    event.client.users.fetch(prompt.author).then(promptAuthor => {
      const field2 = `${promptAuthor.username}#${promptAuthor.discriminator}`;

      embed.addField(prompt.name, field2);
    });
  });

  return embed;
}

只是为了确保我已经涵盖了所有内容,使其将 prompt.name 和 field2 记录到控制台显示它找到了正确的文本,但它没有被添加。从后来的测试中,我发现这是由于对 fetch 的异步调用,因为删除 fetch 命令并在 field2 中使用同步声明的文本是可行的。

标签: node.jsasynchronousdiscord.js

解决方案


改变

const embed = new Discord.MessageEmbed()

var embed = new Discord.MessageEmbed()

推荐阅读