| 

.NET C# Java Javascript Exception

2
Ich möchte in Node.js eine asynchrone Methode, in diesem Beispiel die setTimeout-Methode, in einer for-Schleife ausführen. In ihrem Callback soll ein Zähler hochgezählt werden.
Nach dem durchlaufen soll mit "wait" auf das beenden aller asynchronen Funktionen gewartet werden. Dazu wird der Zähler mit der davor ermittelten Größe des Objekts verglichen.

Zuerst hatte ich den Zähler als einfache Variable übergeben. Das hat natürlich nicht funtioniert. Da der Wert keine Referenz übergeben wird.
Dann habe ich gelesen, dass bei Objekten beim Methodenaufruf die Parameter als Referenz übergeben wird. Nun müsste sich, wenn der Zähler sich ändert, sich auch der Wert in der Wait-Funktion ändern.
Dies macht er aber nicht. Die Wait-Funktion läuft in einer Dauerschleife und der Zähler bleibt bei 0.

Wo liegt der Fehler bzw. wie muss ich den Code abändern?
size = size(Object[i]);

for (var i in Object){
var counter = {count :0},
setTimeout(function(){
//Ihrgendwas tun
counter.count++;
},1000);
}
}
wait(size,counter);

function wait(size,counter){
while (counter.count < size){
//nichts tun
}
};

function size(obj){
var size = 0, key;
for (key in obj){
if (obj.hasOwnProperty(key)) size++;
}
return size;
};
News:
11.07.2014
schoeller 3 2
1 Antwort
1
Node.js arbeitet single-threaded, jedenfalls in dem Sinn, daß es nur einen Thread für Deinen Code gibt. Solange Deine wait-Schleife ausgeführt wird, kann die Funktion, die mit setTimeout gestartet werden soll, nicht laufen.

Ein "Warten" im eigentlichen Sinn des Wortes kannst Du deshalb mMn gar nicht implementieren. Du könntest aber z.B. in Deinen asynchronen laufenden Funktionen nach dem Inkrementieren von counter.count noch prüfen, ob size erreicht wurde, und im Erfolgsfall eine callback-Funktion rufen lassen, die das tut, was Du nach dem wait-Aufruf in Deinem Code tun würdest.
13.07.2014
Matthias Hlawatsch 13,2k 4 9

Stelle deine Javascript-Frage jetzt!