2010-11-26 3 views
5

Несколько минут назад я спросил о цикле, см. Asynchronous for cycle in JavaScript.Loop module для Node.js

На этот раз, мой вопрос: Есть ли какой-нибудь модуль для Node.js?

for (/* ... */) { 

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

    // Okay, continue 

    }) 

} 

alert("For cycle ended"); 
+0

Итак, вы действительно хотите вызвать метод синхронно? – thejh 2010-11-26 23:05:53

+0

@thejh Да! В точку. – 2010-11-26 23:17:20

ответ

3

Разве это трудно переместить материал в модуль?

EDIT: Обновлен код.

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; 

И небольшой тест:

// 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')} 
); 

Rest до вас, это невозможно сделать это 100% общего.

+0

Нет, это не так. Я просто хотел узнать, есть ли что-то особенное для Node.js. В любом случае, еще раз спасибо! – 2010-11-26 23:25:38

1

Да, вы можете использовать Async.js.

Асинхронный представляет собой модуль утилита, которая обеспечивает Прямодушная, мощные функции для работы с асинхронным JavaScript. Хотя изначально предназначен для использования с node.js, его также можно использовать непосредственно в браузере.