向循环javascript

时间:2019-03-01 12:11:19

标签: electron typeorm

在我的电子应用程序中,我想在应用程序启动时注入数据(例如治具)。

我使用typeorm库来管理SQLite3数据库连接。

我创建了代表Entity typeorm的json文件,我想将所有这些文件都使用typeorm持久保存在我的数据库中。为此,似乎使用交易更有效。

我尝试了两种不同的方法,但是结果是相同的,我不理解为什么。问题消息是:

  

错误:给定连接的事务已经开始,提交   当前的交易,然后再开始新的交易

我的第一个交易实现

async setAll(entity, data)
{
    let connection = await this.init()
    const queryRunner = connection.createQueryRunner()
    await queryRunner.connect()

    for (const [key, value] of Object.entries(data))
    {
        await typeorm.getManager().transaction(transactionalEntityManager =>
        {

        })
    }
}

我的第二次交易实现

async setAll(entity, data)
{
    let connection = await this.init()
    const queryRunner = connection.createQueryRunner()
    await queryRunner.connect()

    for (const [key, value] of Object.entries(data))
    {
        let genre1 = new Genre()
        genre1.name = 'toto'
        genre1.identifier = 'gt'
        genre1.logo = ''
        genre1.isActivate = false

        await queryRunner.startTransaction()
        await queryRunner.manager.save(genre1)
        await queryRunner.commitTransaction()
        await queryRunner.release()
    }
}

NB:第二个实现正确地保留了第一个对象,而不是其他对象。

如何管理为持久保存大量数据而创建到循环中的许多typeorm事务?

1 个答案:

答案 0 :(得分:0)

async setAll(entity, data) {
    let connection = await this.init()
    const queryRunner = connection.createQueryRunner()
    await queryRunner.connect()
    await queryRunner.startTransaction()
    try {
        for (const [key, value] of Object.entries(data)) {
            let genre1 = new Genre()
            genre1.name = 'toto'
            genre1.identifier = 'gt'
            genre1.logo = ''
            genre1.isActivate = false
          const newGenre= queryRunner.manager.create(Genre,genre1)
           await queryRunner.manager.save(newGenre)
            await queryRunner.commitTransaction()
        }
    } catch {
        await queryRunner.rollbackTransaction()
    } finally {
        await queryRunner.release()
    }