Eu estou construindo um nestjs aplicativo que usa typeorm para se comunicar com o postgres.
Meu tabelas são criadas dinamicamente, e os dados são inseridos também dinamicamente. É por isso que eu usar matérias de consulta em vez de entidades.
O problema é que alguns dados em tabelas relacionadas e eu não pode inserir novos dados, a menos que a anterior inserir consulta terminou.
Como faço para verificar se de execução de consulta terminou? Aqui está um exemplo de fluxo de trabalho que eu uso. Ele trabalha com dados pequeno, mas falha com grandes volumes de dados (10 000 000 entradas e mais)
export class Test {
constructor(
private readonly connection: Connection;
) {}
public async insertData(table1, table2, arr1, arr2) {
await insertInto(table1, arr1);
//I want second insertInto() to be executed after I get confirmation from database that insertInto() from above is finished
await insertInto(table2, arr2);
}
private async insertInto(table, data) {
const queryRunner = this.connection.createQueryRunner();
await queryRunner.connect();
await queryRunner.startTransaction();
const preparedData = [];
//prepare data to be inserted as raw query
//...
try {
await queryRunner.query(`INSERT IGNORE INTO "${table}" VALUES ${preparedData}`);
await queryRunner.commitTransaction();
} catch (e) {
await queryRunner.rollbackTransaction();
throw new InternalServerErrorException(e, Error while executing custom query. Rollback transaction.)
} finally {
await queryRunner.release();
}
}
}
Resultado desejado é ter algum retorno de chamada para queryRunner.query
como este queryRunner.query('raw_sql', (err, res) => {})
Isso é possível com o typeorm?
Obrigado