В первом случае вы передаете аргументы в presences
в качестве поля сотрудника, и, таким образом, любая фильтрация будет обрабатываться на уровне промежуточного резольвера (а не на запросе верхнего уровня). Вы должны подтвердить, что правильно обрабатываете субрезольвер и его переданные аргументы.
В отличие от этого, во втором примере вы получаете доступ к присутствиям как к запросу верхнего уровня - другими словами, к точке входа в граф, где я ожидать, что вы правильно обрабатываете условия фильтрации.
И FWIW, с помощью knex, я успешно управлял соединениями, используя следующий шаблон, аналогичный тому, который описан где-то в документации:
const trxProvider = knex.transactionProvider();
firstTrx = await trxProvider();
// Use firstTrx
// **Some other logic***
secondTrx = await trxProvider();
// Use secondTrx
// **Some other logic***
thirdTrx = await trxProvider();
// Use thirdTrx then commit
thirdTrx.commit();
Вы можете удобно создавать эти ссылки на транзакции по желанию и все они будут ссылаться на один и тот же trx (даже если помечены разными именами). Это особенно полезно, если ваш trx передается обратному вызову (вызовам), но вы хотели бы, наконец, зафиксировать, например, из первоначально вызывающей функции. Следование этой схеме очень помогло с нашими проблемами с подключением.
Наконец, если ничего не работает, вы можете попытаться изменить конфигурацию вашего диспетчера подключений (см. Пул ниже):
{
client: 'pg',
connection: {
host:
port:
user:
database:
password:
},
pool: { min: 2, max: 20 },
asyncStackTraces: true
};
}