Я пытаюсь сохранить данные в базе данных, но она просто сохраняется как пустой массив.Однако использование console.log показало, что это не пустой массив, так откуда он вообще взял это?
Код требует цикл for, поэтому я подумал, что он пытается сохранить перед тем, какпетля была сделана.Это была не проблема.Тогда я попытался избавиться от любых переменных с таким же именем.Это тоже не сработало.Я должен также упомянуть, что это для бота Discord, так что вы увидите некоторые термины discord.js в коде.Но ... я не верю, что это проблема.
const fs = require('fs');
const contractFiles = fs.readdirSync('./contracts').filter(file => file.endsWith('.json'));
//...
findContracts(buildings, contract).then(remainingContracts => {
var contractsString = JSON.stringify(remainingContracts);
console.log(contractsString); //Returns the data of the contract
sqlite.run('UPDATE guilds SET contracts = $c WHERE id = $i', [$c = contractsString, $i = message.guild.id])
.then(data => {
console.log(data);
})
.catch(err => {
if (err) console.error(err);
});
message.channel.send('', {
embed: {
title: "Construction COMPLETE!",
description: "**Congratulations!**\n\n`" + contract.title + "` has been finished and is now available in your city!",
color: 503575
}
});
});
//...
async function findContracts(buildings, contract) {
var rContracts = [];
const forPromise = new Promise((resolve, reject) => {
for(const file of contractFiles) {
const contract = require(`../contracts/${file}`);
const buildingNum = buildings.length;
const buildingReq = Number(contract.buildingsRequired);
if(buildingReq == buildingNum) rContracts.push(contract);
}
resolve(rContracts);
});
const contracts = await forPromise;
if(!contracts[0]) return [];
return contracts;
}
Я ожидаю, что база данных сохранит детали контракта в массиве в базу данных, но вместо этого она просто сохраняет пустой массив строк.Я даже не получаю сообщение об ошибке.
EDIT : мне удалось это исправить, поместив sqlite.run
в setTimeout
из 1000 миллисекунд.Мне не нравится этот способ, я чувствую себя очень хакерским.Любые лучшие идеи будут высоко ценится.