我正在尝试将数据保存到数据库中,但是它只是一直保存为空数组。但是,使用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;
}
我希望数据库将合同详细信息以数组形式保存到数据库中,但是,它只是保存了一个空的字符串化数组。我什至没有收到错误消息。
编辑:我设法通过将sqlite.run
设置为setTimeout
(1000毫秒)来解决此问题。我不喜欢这样,但感觉很。任何更好的想法将不胜感激。