База данных SQLite неправильно сохраняет данные - PullRequest
0 голосов
/ 28 июня 2019

Я пытаюсь сохранить данные в базе данных, но она просто сохраняется как пустой массив.Однако использование 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 миллисекунд.Мне не нравится этот способ, я чувствую себя очень хакерским.Любые лучшие идеи будут высоко ценится.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...