process.nextTick
öğesinin kendi işini nasıl yaptıklarını tam olarak anlamakta zorlanıyorum. Ben anladım ama ben bu çalışması gerektiğini nasıl hissettiğini çoğaltmak gibi olamaz: döngü olduğununode.js olay kuyruğunu ve process.nextTick'i anlama
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);
foo
, ben handler
foo
arkasında birkaç kez sıraya varsayarak, birkaç istekleri üzerine göndereceğiz callback
ile yalnızca foo
bittiğinde girilmekte.
, Sonucun aşağıdaki gibi görünecektir varsayalım:
received
received
received
received
bar
bar
bar
bar
Ama, sadece sıralı var değildir:
received
bar
received
bar
received
bar
received
bar
Görüyorum foo
, beklendiği gibi callback
yürütülmeden önce dönüyor, ancak callback
, satırın sonunda değil, sıradaki tüm isteklerin arkasında, NEXT satırında görünüyor gibi görünüyor. Bu şekilde çalışır mı? Belki de sadece düğümdeki olay kuyruğunun nasıl çalıştığını anlamıyorum. Ve lütfen bana here'u işaret etmeyin. Teşekkürler.
Hayır, 'setTimeout' aynı şekilde davrandı. Sanırım gerçekten önceki bir istek bitmeden önce http isteklerini işleme koymaya nasıl başlayacağımı soruyorum. – alf
Aslında, setTimeout'un tam aradığım şeyi yaptığını anladım, bu yüzden özür dilerim. Ancak, cpu yoğun görevlerin ve http işlemenin araya sokulmasına izin vermediği takdirde, 'process.nextTick' tam olarak nedir? – alf
"işaretin sonunda değil" - böylece, olay kuyruğunun sonunda bir rastgele işlevi itmenin bir yolu var mı? SetTimeout (fn, 0) 'önerilen bir yol mu yoksa sadece bir çözüm mü? – incarnate