为什么 TypeORM 事务最多只能处理第 10 个值?

问题描述 投票:0回答:1

我有一个 patch 方法,它发送一个包含 15 个对象的数组,我可以完美地打印这 15 个值,但如果我将它们放入entityManager.transaction 中,则只能得到 10 个值。当我发送请求时,Nestjs 服务器不返回任何内容,它完全崩溃了。

我将其发送到NestJs服务器

[
    {
        "id": 399,
        "is_addon": true,
    },
    {
        "id": 400,
        "is_addon": false,
    },
    {
        "id": 401,
        "is_addon": false,
    },
    {
        "id": 402,
        "is_addon": false,
    },
    {
        "id": 403,
        "is_addon": false,
    },
    {
        "id": 404,
        "is_addon": false,
    },
    {
        "id": 405,
        "is_addon": false,
    },
    {
        "id": 406,
        "is_addon": false,
    },
    {
        "id": 407,
        "is_addon": false,
    },
    {
        "id": 408,
        "is_addon": false,
    },
    {
        "id": 409,
        "is_addon": false,
    },
    {
        "id": 410,
        "is_addon": false,
    },
    {
        "id": 411,
        "is_addon": false,
    },
    {
        "id": 412,
        "is_addon": false,
    },
    {
        "id": 413,
        "is_addon": false,
    }
]

我在交易之外打印id

const promises = body.body.map(async (bodyConfirm, id) => {
    console.log('id -> ', id);
    await this.entityManager.transaction(async transactionalEntityManager => {
        const incidentCurrent = await super.findOne({ id: bodyConfirm.id }, ['incident_management_users']);
        const proContactUser = await this.userService.findOne({
            user_name: incidentCurrent.incident_management_users.user_name,
            telegram: Not(IsNull())
        })
    })
})

回复:

当我放入交易中时

const promises = body.body.map(async (bodyConfirm, id) => {
    await this.entityManager.transaction(async transactionalEntityManager => {
        --> console.log('id -> ', id);
        const incidentCurrent = await super.findOne({ id: bodyConfirm.id }, ['incident_management_users']);
        const proContactUser = await this.userService.findOne({
            user_name: incidentCurrent.incident_management_users.user_name,
            telegram: Not(IsNull())
        })
    })
})

回复:

我不知道为什么会这样,如果你知道原因请分享,谢谢!

node.js transactions nestjs typeorm
1个回答
0
投票

我终于解决了上面的问题,我把交易放在map方法之外,然后一切都运行得很完美,我认为原因是因为我创建了太多交易

await this.entityManager.transaction(async transactionalEntityManager => {
   await Promise.all(body.body.map(async (bodyConfirm) => { 
    // code here
   })
  )
 })

© www.soinside.com 2019 - 2024. All rights reserved.