2014-09-04 5 views
2

je suis en train d'utiliser sqlite3 dans le script Node.js, je suis en utilisant cette bibliothèque:Node.js script avec appel sqlite3 synchrone

https://github.com/mapbox/node-sqlite3

mais je veux que l'appel à la base de données synchrone et non asynchrone, ceci est un exemple du code que j'utilise:

var tests = []; 

db.serialize(function() { 

    db.each("SELECT lot_id, status FROM TestTable ORDER BY lot_id ASC", function(err, row) { 
     tests.push(row.status); 
     console.log("Read "+row.lot_id+" state: "+row.status); 
    }); 
}); 

db.close(); 

for (i = 0; i < tests.length; i++) { 
//Do something 
} 

lorsque l'exécution arrive à la boucle, relisez parce que le tableau des tests est encore vide, comment je peux effectuer cette séquence d'instructions?

grâce

Répondre

4

Execute la boucle for dans le rappel complet

var tests = []; 

db.serialize(function() { 

    db.each("SELECT lot_id, status FROM TestTable ORDER BY lot_id ASC", function(err, row) { 
     tests.push(row.status); 
     console.log("Read "+row.lot_id+" state: "+row.status); 
    }, function() { // this callback is executed when the query completed 
    for (i = 0; i < tests.length; i++) { 
    // Do something 
    } 
    }); 
}); 

db.close(); 
+0

j'ai une très grande quantité de code à exécuter après la boucle for, je peux insérer tout ce code dans le serialize? il n'y a pas une meilleure solution? – Piero

+1

Vous pouvez placer ce code dans une fonction et appeler cette fonction depuis le rappel complet. – helpermethod

+1

A travaillé pour moi !!! Je n'ai trouvé aucune documentation sur le wiki npm sqlite3 et cela m'a aidé !!! – mEnE