Tengo este problema en el que recibo una matriz de datos que necesito guardar en la base de datos. Tengo que recorrer la matriz y crear una fila en la tabla. Pero el problema es que el bucle está iterando al siguiente índice antes de que finalice la primera solicitud.
¿Cómo me acerco a esto?
código: A continuación se crea una conexión dentro de un bucle para que cada solicitud pueda tener una conexión
for (let i = 0; i < newroomname.length; i++) {
var addroomconnection = new Connection(config);
addroomconnection.on('connect', function (err) {
// If no error, then good to proceed.
console.log("Connected");
addNewRoom(addroomconnection, floorID, newroomname[i]);
});
addroomconnection.connect();
}
A continuación se muestra la función que maneja la solicitud:
function addNewRoom(addroomconnection, floorID, newroomname) {
return new Promise((resolve, reject) => {
console.log("Writing rows into table room in function addNewRoom()...");
let roomID = v4();
// ? Write row into table
console.log('inside loop');
const request = new Request(
`INSERT INTO [dbo].[room] (room_id, floor_id, room_name, time_created, time_modified)
VALUES ('${roomID}', '${floorID}', '${newroomname}', GETDATE(), GETDATE());`,
(err, rowCount) => {
if (err) {
console.error(err.message);
reject(err);
} else {
console.log(`${rowCount} row(s) for rooms returned`);
}
}
);
request.on('requestCompleted', function (rowCount, more) {
console.log('req completed');
});
addroomconnection.execSql(request);
});
}
Error
RequestError: Requests can only be made in the LoggedIn state, not the LoggedInSendingInitialSql state
at Connection.makeRequest (C:\Users\NAA\Documents\express-test\node_modules\tedious\lib\connection.js:2208:24)
at Connection.execSql (C:\Users\NAA\Documents\express-test\node_modules\tedious\lib\connection.js:1738:10)
at C:\Users\NAA\Documents\express-test\server.js:477:27
at new Promise (<anonymous>)
at addNewRoom (C:\Users\NAA\Documents\express-test\server.js:429:12)
at Connection.<anonymous> (C:\Users\NAA\Documents\express-test\server.js:413:21)
at Connection.emit (node:events:390:28)
at Connection.emit (C:\Users\NAA\Documents\express-test\node_modules\tedious\lib\connection.js:1048:18)
at Connection.processedInitialSql (C:\Users\NAA\Documents\express-test\node_modules\tedious\lib\connection.js:1669:10)
at C:\Users\NAA\Documents\express-test\node_modules\tedious\lib\connection.js:2723:14 {
code: 'EINVALIDSTATE',
number: undefined,
state: undefined,
class: undefined,
serverName: undefined,
procName: undefined,
lineNumber: undefined
}