Ich habe Probleme zu verstehen, genau wie process.nextTick
macht seine Sache. Ich dachte, ich verstanden, aber ich kann nicht zu replizieren scheinen, wie ich finde, dass das funktionieren sollte:Verständnis der Ereigniswarteschlange node.js und process.nextTick
var handler = function(req, res) {
res.writeHead(200, {'Content-type' : 'text/html'});
foo(function() {
console.log("bar");
});
console.log("received");
res.end("Hello, world!");
}
function foo(callback) {
var i = 0;
while(i<1000000000) i++;
process.nextTick(callback);
}
require('http').createServer(handler).listen(3000);
Während foo
geloopt, werde ich über mehrere Anfragen senden, unter der Annahme, dass handler
wird mehrmals hinter foo
Warteschlange gestellt werden mit callback
wird nur eingereiht, wenn foo
beendet ist.
Wenn ich richtig darüber, wie das funktioniert, gehe ich davon aus das Ergebnis wie folgt aussehen:
received
received
received
received
bar
bar
bar
bar
Aber es ist es nicht, nur sequentiell:
received
bar
received
bar
received
bar
received
bar
Ich sehe, dass foo
wird vor der Ausführung von callback
, die erwartet wird zurückgegeben, aber es scheint, dass callback
ist NEXT in der Zeile, anstatt am Ende der Warteschlange, hinter allen eingehenden Anfragen. So funktioniert es? Vielleicht verstehe ich einfach nicht, wie genau die Ereigniswarteschlange im Knoten funktioniert. Und bitte zeigen Sie mich nicht here. Vielen Dank.
Nein, 'setTimeout' verhielt sich genauso. Ich denke, ich frage wirklich, wie ich HTTP-Anfragen verarbeiten soll, bevor eine vorherige Anfrage beendet ist. – alf
Tatsächlich habe ich festgestellt, dass 'setTimeout' genau das tut, wonach ich gesucht habe, also entschuldige ich mich. Aber was genau ist 'process.nextTick' für, wenn es nicht die Verschachtelung von CPU-intensiven Aufgaben und HTTP-Verarbeitung erlaubt? – alf
"nicht am Ende des Ticks" - Gibt es also eine Möglichkeit, eine beliebige Funktion am Ende der Ereigniswarteschlange zu drücken? Ist 'setTimeout (fn, 0)' ein empfohlener Weg oder nur ein Workaround? – incarnate