Ich versuche, mehrere Daten aus der Datenbank zu lesen, sie in ein Array zu legen und mit dem Array umzugehen. Der Code sieht wie folgt aus:node js: Wie kann eine Funktion nach einer Reihe von Datenbanklesevorgängen ausgeführt werden?
var array = [];
// first for loop
for (var i = 0; i < 10; i++) {
db.read(i, function(rs) { // read data from database and put it into array
array.push(rs);
}
}
// second for loop
for (int i = 0; i < 10; i++) {
console.log(array[i]);
}
dieses Stück Code wird jedoch nicht funktionieren, weil die zweite for-Schleife ausgeführt wird, bevor die erste Schleife endet. Gibt es irgendwelche guten Lösungen? Übrigens, ich habe so benutzten Versprechen:
var array = [];
var promise = new Promise(function(resolve, reject) {
for (var i = 0; i < 10; i++) {
db.read(i, function(rs) { // read data from database and put it into array
array.push(rs);
}
}
resolve(array);
};
promise.then(function(array) {
for (int i = 0; i < 10; i++) {
console.log(array[i]);
}
};
Es funktioniert auch nicht, so scheint es, dass die Entschlossenheit wird nicht warten, bis alle db Leseoperationen zu beenden. Wann wird die Lösung warten, bis der vorherige Code fertig ist?
Werfen Sie einen Blick auf [ 'Promise.all'] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/all). Unterstützt Ihre Datenbank die Rückgabe von 'Promise' statt eines Rückrufs? – qxz
http://stackoverflow.com/questions/6597493/synchronous-database-queries-with-node-js – Adiii