0

I'm trying to return a value after a for loop has been completed, the for loop is inside an async function. Inside the loop, there's a query that inserts to the db.

The function is working ok, but when i use postman, the response returns empty (even tho the values have been inserted to the db)

Here's how i call the function:

        insertarPracticas(turno_id,req.body.lista_codigos_practicas, queryInsertarPracticas)
        .then( result=> {
                 res.status(200).json({
                      "Practicas Agregadas": result
                    })
                 }
        )

And here's the function:

async function insertarPracticas(turno_id, req, queryInsertarPracticas){
//practicasAgregadas="";
return new Promise((resolve, reject) => {
    for (let i=0; i< req.length; i++){ 
        connection.query(
            queryInsertarPracticas, [turno_id, req[i]],(error2, row2) => { 
                if (error2) {
                    console.log("Error al insertar turno detalle (prácticas): "+req[i] +" "+ error2);             
                    practicasNoAgregadas += req[i] + "-";                   
                }else{
                    console.log("Turnos detalle agregados "+req[i]);
                    practicasAgregadas += req[i] + "-"; 
                    console.log("practicas "+practicasAgregadas);
                }
        });
        console.log("en for "+practicasAgregadas);
    }
    resolve(practicasAgregadas)

    // Or of there was an error
    reject("error");
})

What's happening here is that the function won't wait for the connection query to end, even tho it inserts values to the db, on Postman i get the first result, which is empty:

enter image description here

But i do have the values inserted on my database.

What's the correct way to handle this? I've tried using map instead of for, and now i'm trying with promise, but i'm not sure i'm using it correctly.

Here's the console, where you can see that the console.log("en for" + practicasAgregadas) returns empty, when it should have some values.

1
  • 1
    connection.query is asynchronous. You should use Promise.all to wait for all those queries to finish Commented Dec 10, 2021 at 16:27

2 Answers 2

1

I don't know how you built your connection file, but you should change it to an async function and await the connection.query

Sign up to request clarification or add additional context in comments.

1 Comment

i don't have a connection file, its just a constant: codeshare.io/zy6rwD
1

after your map, just use:

await Promise.all(yourArray);

2 Comments

Your answer could be improved by adding more information on what the code does and how it helps the OP.
@hakikayoub i have a question tho, i was able to make it return 3 values, they return null. How do i set the values to the res constant? codeshare.io/K8wexo

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.