Entonces, me preguntaba ¿cuál es la mejor forma (en términos de crecimiento y rendimiento de la pila) de invocar recursivamente una función a intervalos regulares? Por ejemplo, digamos que quiero leer el contenido del archivo cada 200 ms. Tengo los dos métodos siguientes y me preguntaba si son diferentes.Función de llamada recursiva a intervalos regulares
Método 1: Utilizar oles de civil y sin setTimeout process.nextTick
var fs = require('fs');
(function loop() {
// Print to time to indicate something is happening
console.log(new Date().toString());
// Read a 51MB file
fs.readFile('./testfile', function (err, data) {
if (err) console.log(err);
});
// Call the same function again
setTimeout(function() {
loop();
}, 200);
})();
Método 2: Llamada process.nextTick dentro setTimeout
var fs = require('fs');
(function loop() {
// Print to time to indicate something is happening
console.log(new Date().toString());
// Read a 51MB file
fs.readFile('./testfile', function (err, data) {
if (err) console.log(err);
});
// Call the same function again
setTimeout(function() {
process.nextTick(function() {
loop();
});
}, 200);
})();
Lo que yo quiero saber es que la adición de process.nextTick interior setTimeout ayuda o no? ¿Llamar a la función dentro de process.nextTick aliviará el uso de la pila o no?
Por no responder, pero que sin duda debe poner el 'setTimeout' en la devolución de llamada de su 'readFile'. –
No veo ninguna llamada recursiva aquí. El bucle de llamada a llamada se invoca cuando ocurre el evento de tiempo de espera, no desde dentro de la función. No se puede invocar hasta que loop() devuelva – jcoder