Javascript 环回:";未处理的拒绝错误:事务未激活";何时同时开始10个事务

Javascript 环回:";未处理的拒绝错误:事务未激活";何时同时开始10个事务,javascript,node.js,postgresql,loopbackjs,loopback,Javascript,Node.js,Postgresql,Loopbackjs,Loopback,我有一个使用loopback和postgresql的nodejs项目 我得到了一个类似这样的函数handleTrade,只需启动超时30秒的事务,按id查询交易并进行一些更新: async function handleTrade(id) { const { Trade } = app.models; const transaction = await Trade.beginTransaction({ timeout: 30000 // 30 seconds }); t

我有一个使用loopback和postgresql的nodejs项目

我得到了一个类似这样的函数
handleTrade
,只需启动超时30秒的事务,按id查询交易并进行一些更新:

async function handleTrade(id) {
  const { Trade } = app.models;
  const transaction = await Trade.beginTransaction({
    timeout: 30000 // 30 seconds
  });

  try {
    console.log(`${id} - 1`);
    const trade = await Trade.findById(id, { transaction });
    console.log(`${id} - 2`);

    if (trade) {
      // Do some updates with the trade
    }
    transaction.commit();
  } catch (e) {
    console.log(`${id} - 3`, e);
    transaction.rollback();
  }
}
我有一个10个ID的列表,我希望异步处理所有ID,并在完成所有操作后打印
Done

async function test(ids) {
  const promises = ids.map(id => handleTrade(id));
  await Promise.all(promises);
  console.log('Done');
  process.exit(0);
}

test([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]);
下面是日志:

2 - Step 1
3 - Step 1
1 - Step 1
4 - Step 1
6 - Step 1
5 - Step 1
10 - Step 1
9 - Step 1
8 - Step 1
7 - Step 1

-- The process stuck here for 30 seconds (which is the timeout value of the transaction)

2 - Step 2
Unhandled rejection Error: The transaction is not active: 914ca760-b804-11e8-bb6c-094b32725638
    at process.nextTick (/Users/admin/Work/NIX/nix-project/engine/node_modules/loopback-datasource-juggler/lib/transaction.js:202:12)
    at _combinedTickCallback (internal/process/next_tick.js:131:7)
    at process._tickCallback (internal/process/next_tick.js:180:9)

9 - Step 2
1 - Step 2
3 - Step 2
6 - Step 2
4 - Step 2
5 - Step 2
10 - Step 2
8 - Step 2
Unhandled rejection Error: The transaction is not active: 914e5510-b804-11e8-bb6c-094b32725638
    at process.nextTick (/Users/admin/Work/NIX/nix-project/engine/node_modules/loopback-datasource-juggler/lib/transaction.js:202:12)
    at _combinedTickCallback (internal/process/next_tick.js:131:7)
    at process._tickCallback (internal/process/next_tick.js:180:9)

Unhandled rejection Error: The transaction is not active: 914cce71-b804-11e8-bb6c-094b32725638
    at process.nextTick (/Users/admin/Work/NIX/nix-project/engine/node_modules/loopback-datasource-juggler/lib/transaction.js:202:12)
    at _combinedTickCallback (internal/process/next_tick.js:131:7)
    at process._tickCallback (internal/process/next_tick.js:180:9)

Unhandled rejection Error: The transaction is not active: 914cce70-b804-11e8-bb6c-094b32725638
    at process.nextTick (/Users/admin/Work/NIX/nix-project/engine/node_modules/loopback-datasource-juggler/lib/transaction.js:202:12)
    at _combinedTickCallback (internal/process/next_tick.js:131:7)
    at process._tickCallback (internal/process/next_tick.js:180:9)

Unhandled rejection Error: The transaction is not active: 914cf581-b804-11e8-bb6c-094b32725638
    at process.nextTick (/Users/admin/Work/NIX/nix-project/engine/node_modules/loopback-datasource-juggler/lib/transaction.js:202:12)
    at _combinedTickCallback (internal/process/next_tick.js:131:7)
    at process._tickCallback (internal/process/next_tick.js:180:9)

Unhandled rejection Error: The transaction is not active: 914cf580-b804-11e8-bb6c-094b32725638
    at process.nextTick (/Users/admin/Work/NIX/nix-project/engine/node_modules/loopback-datasource-juggler/lib/transaction.js:202:12)
    at _combinedTickCallback (internal/process/next_tick.js:131:7)
    at process._tickCallback (internal/process/next_tick.js:180:9)

Unhandled rejection Error: The transaction is not active: 914cf582-b804-11e8-bb6c-094b32725638
    at process.nextTick (/Users/admin/Work/NIX/nix-project/engine/node_modules/loopback-datasource-juggler/lib/transaction.js:202:12)
    at _combinedTickCallback (internal/process/next_tick.js:131:7)
    at process._tickCallback (internal/process/next_tick.js:180:9)

Unhandled rejection Error: The transaction is not active: 914cf583-b804-11e8-bb6c-094b32725638
    at process.nextTick (/Users/admin/Work/NIX/nix-project/engine/node_modules/loopback-datasource-juggler/lib/transaction.js:202:12)
    at _combinedTickCallback (internal/process/next_tick.js:131:7)
    at process._tickCallback (internal/process/next_tick.js:180:9)

Unhandled rejection Error: The transaction is not active: 914e5511-b804-11e8-bb6c-094b32725638
    at process.nextTick (/Users/admin/Work/NIX/nix-project/engine/node_modules/loopback-datasource-juggler/lib/transaction.js:202:12)
    at _combinedTickCallback (internal/process/next_tick.js:131:7)
    at process._tickCallback (internal/process/next_tick.js:180:9)

7 - Step 2
Done
在步骤1之后,进程停滞了30秒,然后当事务超时时,它返回错误
事务未激活

只有当我有10个ID时才会发生这种情况,如果我只使用9个ID,它就会运行顺畅

test([1, 2, 3, 4, 5, 6, 7, 8, 9]);

// Logs
2 - Step 1
4 - Step 1
5 - Step 1
9 - Step 1
7 - Step 1
8 - Step 1
6 - Step 1
1 - Step 1
3 - Step 1
2 - Step 2
4 - Step 2
9 - Step 2
8 - Step 2
1 - Step 2
5 - Step 2
7 - Step 2
6 - Step 2
3 - Step 2
Done

如果你有任何想法,请帮助我。谢谢

请尝试编辑您的数据源文件

示例:my dataresources.json

旧的:

新的:

说明:
您的问题主要是连接池不足,这会增加问题。(100只是一个示例数字,您可以从0更改为postgresql配置中定义的最大值)

听起来默认的连接池大小是10,您的连接即将用尽。不知道如何在环回中处理这个问题(从未使用过)。欢迎继续,你能解释一下为什么这个编辑解决了这个问题吗?:)@AndréDS在我编辑的答案中做出了抱歉的解释!谢谢你邀请我
{   
  "db": {
    "url": "${DATABASE_URL}",
    "name": "db",
    "connector": "postgresql"
  }
}
{
  "db": {
    "url": "${DATABASE_URL}",
    "name": "db",
    "connector": "postgresql",
    "max": 100
  }
}