2010-11-26 37 views
5

Hace unos minutos pregunté sobre el bucle, vea Asynchronous for cycle in JavaScript.Módulo de bucle para Node.js

Esta vez, mi pregunta es - ¿Hay algún módulo para Node.js?

for (/* ... */) { 

    // Wait! I need to finish this async function 
    someFunction(param1, praram2, function(result) { 

    // Okay, continue 

    }) 

} 

alert("For cycle ended"); 
+0

¿Desea efectivamente llamar al método de forma síncrona? – thejh

+0

@thejh ¡Sí! Exactamente. –

Respuesta

3

¿Es tan difícil mover la materia en un módulo?

EDITAR: Actualizó el código.

function asyncLoop(iterations, func, callback) { 
    var index = 0; 
    var done = false; 
    var loop = { 
     next: function() { 
      if (done) { 
       return; 
      } 

      if (index < iterations) { 
       index++; 
       func(loop); 

      } else { 
       done = true; 
       callback(); 
      } 
     }, 

     iteration: function() { 
      return index - 1; 
     }, 

     break: function() { 
      done = true; 
      callback(); 
     } 
    }; 
    loop.next(); 
    return loop; 
} 

exports.asyncFor = asyncLoop; 

Y una pequeña prueba:

// test.js 
var asyncFor = require('./aloop').asyncFor; // './' import the module relative 

asyncFor(10, function(loop) {  
     console.log(loop.iteration()); 

     if (loop.iteration() === 5) { 
      return loop.break(); 
     } 
     loop.next(); 
    }, 
    function(){console.log('done')} 
); 

resto depende de usted, es imposible hacer esta 100% genérica.

+0

No, no lo es. Solo quería saber si hay algo especial para Node.js. De todos modos, gracias de nuevo! –

+0

No conozco ningún módulo de este tipo, debe escribir el suyo para tales funciones genéricas, normalmente utiliza un enfoque completamente diferente para evitar la necesidad de tales "async for loops". Pero las soluciones difieren enormemente según el tipo de problema. –

+0

Bien, gracias por la aclaración. –

1

Sí, puede usar Async.js.

asíncrono es un módulo de utilidad que proporciona sencillo, de gran alcance funciones para trabajar con JavaScript asíncrono. Aunque originalmente diseñado para su uso con node.js, también se puede usar directamente en el navegador.

+1

Echó un vistazo rápido, pero lo que ella quiere hacer no se puede reproducir exactamente en 'async.js'. Ella quiere bloquear hasta que la devolución de llamada haya terminado y eso por X veces. Sin embargo, la cola se acercaría, pero necesitaría algunos cambios en el código que tiene ahora. También tiene otra devolución de llamada dentro de su función, lo que la vuelve un poco más complicada. –

Cuestiones relacionadas