Estoy construyendo una nestjs aplicación que utiliza typeorm para comunicarse con el usuario postgres.
Mis tablas son creadas dinámicamente, y los datos se insertan también de forma dinámica. Es por eso que yo uso en crudo, consulta en lugar de entidades.
El problema es que algunos de los datos en tablas están relacionadas y yo no se puede insertar nuevos datos, a menos que previa consulta insert ha terminado.
¿Cómo puedo comprobar si la ejecución de la consulta terminado? Aquí es un ejemplo de flujo de trabajo que yo uso. Trabaja con pequeños datos, pero no con el big data (10 000 000 entradas y más)
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 deseado es tener algo de devolución de llamada para queryRunner.query
como este queryRunner.query('raw_sql', (err, res) => {})
Es posible que con typeorm?
Gracias