-2

I want to use the for loop outside of the query but it is printing empty.

sql = 'SELECT * FROM people';
let currMarker = [];

db.all(sql, [], (err,rows) => {
    if (err) return console.error(err.message);
    
    currMarker = rows;

    for (let i = 0; i < currMarker.length; i++) {
        console.log(currMarker[i].name);
        console.log(currMarker[i].username);
    }
});

I want to use it like :

sql = 'SELECT * FROM people';
let currMarker = [];

db.all(sql, [], (err,rows) => {
    if (err) return console.error(err.message);
    
    currMarker = rows;
});

for (let i = 0; i < currMarker.length; i++) {
    console.log(currMarker[i].name);
    console.log(currMarker[i].username);
}
user4157124
  • 2,809
  • 13
  • 27
  • 42
redfries
  • 7
  • 3
  • 2
    Does this answer your question? [How do I return the response from an asynchronous call?](https://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an-asynchronous-call) – Samathingamajig Nov 12 '22 at 07:29
  • You can't use it outside the request this way. You've to use promises or async/await. – Araf Nov 12 '22 at 07:30

1 Answers1

0

Here's a solution.

sql = 'SELECT * FROM people';

let currMarker = [];

const queryFunc = () =>{
    return new Promise((resolve, reject)=>{
        db.all(sql, [], (err,rows) => {
            if (err) return console.error(err.message);
            
            currMarker = rows;
            resolve();
        });
    });
};

queryFunc().then((val)=>{
    for (let i = 0; i < currMarker.length; i++) {
        console.log(currMarker[i].name);
        console.log(currMarker[i].username); 
    }
});
user4157124
  • 2,809
  • 13
  • 27
  • 42
Araf
  • 263
  • 1
  • 5
  • 19