2015-02-16 2 views
0

У меня есть цикл for, который выполняет много итераций. Я хотел бы поместить этот фрагмент кода в пользовательскую функцию async, поскольку он блокирует. Там все равно я могу написать функцию, чтобы она вызвать обратный вызов после завершения цикла ?.превращение синхронной функции в асинхронную функцию

+1

Если у вас нет каких-либо неблокирующих операций, async не поможет вам вообще. Прочитайте http://blog.slaks.net/2014-12-23/parallelism-async-threading-explained/ – SLaks

+0

Я бы изменил свой взгляд на рекурсивную функцию и всегда откладывал следующее исполнение до следующего тика –

+0

, который у вас может быть посмотрите на асинхронную библиотеку -https: //github.com/caolan/async –

ответ

1

Использование парадигмы асинхронной функции внутри цикла. Это гарантирует, что асинхронные функции вызываются с правильным значением индексной переменной.

var total = someObject.list.length; 
    var count = 0; 

    for(var i = 0; i < total; i++){ 
    (function(foo){ 
    myobj.get(someObject.list[foo], function(err, response) { 
     do_something(foo); 
     count++; 
     if (count > total - 1) done(); 
    }); 
    }(i)); //To immediately invoke the function passing 'i' as parameter 
    } 


    function done() { 
    console.log('All data loaded'); 
    } 
Смежные вопросы