Discord 强制异步函数等待模块加载其属性
对于我的discord bot,我想让我的bot在查询mongo前缀之前检查它是否缓存了服务器的前缀。问题是异步函数在尝试读取缓存之前不会等待缓存初始化Discord 强制异步函数等待模块加载其属性,discord,discord.js,Discord,Discord.js,对于我的discord bot,我想让我的bot在查询mongo前缀之前检查它是否缓存了服务器的前缀。问题是异步函数在尝试读取缓存之前不会等待缓存初始化 const common = require('../util/common'); const Discord = require('discord.js'); const math = require('mathjs'); const guildSettings = require('../schema/guildSchema'); mod
const common = require('../util/common');
const Discord = require('discord.js');
const math = require('mathjs');
const guildSettings = require('../schema/guildSchema');
module.exports = {
name: "test2",
description: "a test command!",
usage: `\`${process.env.PREFIX}test2\``,
category: "Admin",
alias: ["test2"],
disabled: false,
cache: {},
async execute(message, args){
let prefix = await getPrefix();
console.log(this.cache);
message.reply(` your prefix is ${prefix}`);
async function getPrefix(){
if (!this.cache[message.guild.id]){
let settings = await guildSettings.findOne({ _id: message.guild.id });
if (!settings){
settings = await guildSettings.create({
_id: message.guild.id,
prefix: '-',
});
await settings.save();
console.log('entry created')
}
this.cache[message.guild.id] = settings.prefix;
console.log('prefix cached');
return prefix = this.cache[message.guild.id];
} else {
return prefix = this.cache[message.guild.id];
}
}
}
}
忽略
console.log()。当我调用这个命令时,我得到一个错误,因为this.cache
未定义。如何使函数等待父属性初始化?问题出在这个块中
async function getPrefix(){
if (!this.cache[message.guild.id]){ // here this doesn't refer to parent but the function itself
let settings = await guildSettings.findOne({ _id: message.guild.id });
if (!settings){
settings = await guildSettings.create({
_id: message.guild.id,
prefix: '-',
});
await settings.save();
console.log('entry created')
}
this.cache[message.guild.id] = settings.prefix;
console.log('prefix cached');
return prefix = this.cache[message.guild.id];
} else {
return prefix = this.cache[message.guild.id];
}
}
这里您使用的是函数关键字。这意味着,每当您在该函数中访问此时,它将引用该函数本身,而不是父函数
解决方法是首先将父变量的这个值存储在另一个变量中
async execute(message, args){
const self = this; // this is new , no pun intended
let prefix = await getPrefix();
console.log(self.cache);
message.reply(` your prefix is ${prefix}`);
async function getPrefix(){
if (!self.cache[message.guild.id]){
let settings = await guildSettings.findOne({ _id: message.guild.id });
if (!settings){
settings = await guildSettings.create({
_id: message.guild.id,
prefix: '-',
});
await settings.save();
console.log('entry created')
}
self.cache[message.guild.id] = settings.prefix;
console.log('prefix cached');
return prefix = self.cache[message.guild.id];
} else {
return prefix = self.cache[message.guild.id];
}
}
}
嗯,事情总是这么简单,是吗?谢谢!总是男人。我失眠的原因