SQLite数据库未正确保存数据

时间:2019-06-28 00:18:50

标签: node.js sqlite

我正在尝试将数据保存到数据库中,但是它只是一直保存为空数组。但是,使用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毫秒)来解决此问题。我不喜欢这样,但感觉很。任何更好的想法将不胜感激。

0 个答案:

没有答案