繁体   English   中英

异步 Function 返回 promise

[英]Async Function returns promise

我有一个 function 返回 Discord.JS 中的公会前缀:

获取前缀.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 };

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

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

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

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

Promise { '!' }

是否可以只返回引号内的实际前缀而没有 Promise?

可以,但您必须从异步 function 返回值。

获取前缀.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);
});

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

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));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM