Я пишу бот Discord, который генерирует еженедельную статистику гильдии для использования текстового и голосового каналов. Мой код делит несколько запросов Mon go на отдельные методы:
function getTopActiveTextChannels() {
let topTextChannels = []
ChannelModel.find({}).sort({"messageCountThisWeek": -1}).limit(topLimit)
.exec(channels => {
channels.forEach(c => {
topTextChannels.push({"name": c.name, "messageCount": c.messageCount})
})
console.log(topTextChannels)
return topTextChannels
})
}
function getTopActiveVoiceMembers() {
let topVoiceMembers = []
UserModel.find({}).sort({"timeSpentInVoice": -1}).limit(topLimit)
.exec(users => {
users.forEach(u => {
topVoiceMembers.push({"username": u.username, "timeSpentInVoice": u.timeSpentInVoice})
})
console.log(topVoiceMembers)
return topVoiceMembers
})
}
У меня есть один метод, который вызывает оба этих метода и (на данный момент) выводит значения в консоль:
function getWeeklyGuildStats(client) {
let topActiveTextChannels = getTopActiveTextChannels()
let topVoiceMembers = getTopActiveVoiceMembers()
let promisesArray = [topActiveTextChannels, topVoiceMembers]
Promise.all(promisesArray).then(values => {console.log(values)})
}
Выполнение getWeeklyGuildStats(client)
выходов: [ undefined, undefined ]
. Я уверен, что я не правильно использую обещания, но когда я следую документации Mon goose, он говорит мне использовать exec()
вместо then()
, но я получаю ошибку channels = null
с этим.
Что-нибудь выпрыгивает кому-нибудь? Это похоже на довольно распространенную модель. У кого-нибудь есть решение, как разрешить несколько запросов Mon goose в одном методе?