Я не уверен, почему массив, созданный в этом цикле внутри асинхронной функции, не проходит, когда я вызываю его позже в коде.
Я сделал асинхронные функции, которые ожидаютРеакции работают правильно, затем обычные функции синхронизации, которые задают вопросы и ждут ответа от пользователя, но никогда не выполняют асинхронную функцию, которая ожидает ответа и передает значение для использования позже.Итак, я не уверен, что мне здесь не хватает.Я довольно плохо знаком с асинхронными функциями.
Следующая функция делает несколько вещей.Он спрашивает пользователя, какие имена карт должны быть добавлены в колоду, которую он только что сделал (созданный другой функцией в коде).Когда пользователь предоставляет список названий карт, код проверяет каждую карту в отдельности, чтобы увидеть, существует ли карта в базе данных.Если он находит карту, он помещает ее в массив «совпавших карт».Если карта не может быть добавлена, она отправляет сообщение Discord о том, что оно не найдено.
Он добавляет найденные карты в массив, потому что я записываю его на консоль, и он показывает массив с картами, которые, как я знаю, существуют, и игнорирует тот, который вышел из строя.
Проблема в том, что когда я пытаюсь использовать массив, который я позже передал в коде, он действует так, как будто массив пуст.Я не уверен, почему значение "matchedcards" не передается должным образом.
async function cardExists() {
let msg = await message.author.send(`Please provide the cardnames that you would like to add to '${userdeckname}'.\n\n**NOTE:** Please separate each card with a comma and space, like so "Pact of Darkness, Aquos Slam, Karmic Balance"`)
const filter = m => m.author.id === message.author.id
const reply = await msg.channel.awaitMessages(filter, { max: 1 })
.catch(console.error);
let cardsToAdd = reply.first()
let usercardnamearray = cardsToAdd.content.split(", ")
let matchedcards = []
usercardnamearray.forEach(function(element) {
con.query(`SELECT cardname FROM card_info where cardname = '${element}'`, (error, rows) => {
if (rows == [] || rows == ""){
message.author.send(`The card **${element}** could not be added. Please check your spelling, capitalization and enter your list of cards again!`)
} else if (rows[0] != undefined || rows[0] != null || rows[0] != "" || rows[0]){
matchedcards.push(element)
console.log(`'${element}' found in database!`)
console.log(matchedcards)
}
})
})
console.log(matchedcards)
return matchedcards;
}
Тогда я использую код позже ... Я не уверен, что он запускается слишком раноили что
(async function(){
//Some other if/else statements, each being determined by different functions stated earlier in the code... code below is inside the if else statement that worked fine until this variable doesn't get passed
let matchedcards = await cardExists();
if (matchedcards.length > 0){
matchedcards.join(", ")
message.author.send(`You have added **${matchedcards}** to ${userdeckname}!`)
let sql2 = `INSERT INTO devdecks (creatoruser, creatorid, deckname, cardnames) VALUES ('${author.username}', ${author.id}, '${userdeckname}', '${matchedcards}')`
con.query(sql2)
}
Функция работает, как и предполагалось, как я уже говорил, я просто получаю такой ответ вместо этого "Вы добавили ** в тестовую колоду 21!"дискордировать вместо карт массива / списка, которые были успешными ... Я надеюсь, что я не пропускаю что-то маленькое, что я брошу лицом к лицу и скажу, что я глуп по ... ... 1015 *
Заранее спасибо за вашу помощь!