【问题标题】:Async Function returns promise异步函数返回承诺
【发布时间】:2022-01-26 09:16:42
【问题描述】:

我有一个函数可以返回 Discord.JS 中的公会前缀:

getprefix.js:

const GuildSchema = require("../Database/Models/GuildConfigs");
const { DEFAULT } = require("./config");

const getprefix = async (id) => {
  const guildConfigs = await GuildSchema.findOne({
    GuildID: id,
  });

  let PREFIX = DEFAULT;

  if (guildConfigs && guildConfigs?.Prefix) {
    PREFIX = guildConfigs?.Prefix;
  }
};

module.exports = { getprefix };

我使用这个在另一个文件中调用函数:

let prefix = getprefix(message.guild.id);

prefix.then(() => {
    console.log(prefix);
});

问题是它在控制台中返回这个:

Promise { '!' }

是否可以只返回引号内的实际前缀而不使用 Promise?

【问题讨论】:

标签: javascript discord.js


【解决方案1】:

是的,但您必须从异步函数返回值。

getprefix.js:

const GuildSchema = require("../Database/Models/GuildConfigs");
const { DEFAULT } = require("./config");

const getprefix = async (id) => {
  const guildConfigs = await GuildSchema.findOne({
    GuildID: id,
  });

  let PREFIX = DEFAULT;

  if (guildConfigs && guildConfigs?.Prefix) {
    PREFIX = guildConfigs?.Prefix;
  }
  return PREFIX;
};

module.exports = { getprefix };

并更改呼叫:

let prefix = getprefix(message.guild.id);

prefix.then((value) => {
    console.log(value);
});

【讨论】:

    【解决方案2】:

    首先,您必须从名为getprefix 的异步函数返回一个值。其次你必须console.loggetprefix函数返回的promise的结果,而不是promise本身:

    const getprefix = async (id) => {
      const guildConfigs = await GuildSchema.findOne({GuildID: id});
      
      if (!guildConfigs || !guildConfigs.Prefix) {
        return DEFAULT;
      }
    
      return guildConfigs.Prefix;
    };
    
    getprefix(message.guild.id).then(prefix => console.log(prefix));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-16
      • 2018-12-22
      相关资源
      最近更新 更多