2016-04-08 23 views
0

Node.js kodumda, tamamlanması birkaç saniye süren basit bir meşgul döngüsüne sahibim. Bu süre zarfında, şu anda kuyrukta bulunan ve döngüden sonra "paralel" yerine döngüden sonra yürütülen bazı G/Ç işlemlerini gerçekleştirmem gerekiyor. Düğümün paralel yürütme yapmadığını biliyorum, bu yüzden Düğümün başka şeyler yapmasına izin vermek için döngüyü kesmenin bir yolunu arıyorum.Node.js'de meşgul döngüyü durdur

Döngüleri eşzamansız olarak uygulamayı denedim, ancak bu çağrı yığınının aşılmasına neden oldu (i kolayca 2.000.000'e kadar çıkıyor).

while(i < length){ 
    if(something) sendWebSocketMessage(); 
    //Do stuff with i 
    i++; 
} 

Herhangi bir fikir?

cevap

1

bir çözüm bu gibi döngü yazmak için olabilir:

(function step(){ 
    doSomething(); 
    if (length--) setImmediate(step); 
})(); 

Bu şekilde diğer etkinlikler ele alacağını arasında geliyor. Döngününüz çok sayıda yineleme nedeniyle uzunsa (uzun adımlar nedeniyle), doSomething() yerine kısmi bir döngüye sahip olabilirsiniz.

sen, sen de olmayan bir boş zaman aşımıyla setTimeout kullanabilirsiniz diğer görevler için daha fazla zaman izin için, sizin döngü yavaşlatmak isterseniz:

(function step(){ 
    doSomething(); 
    if (length--) setTimeout(step, 5); 
})();