2015-07-22 2 views
2

Как я могу ждать внутри цикла for до тех пор, пока не будет получен обратный вызов, а затем продолжит цикл for?NodeJS loop wait for callback

Вот мой цикл:

for(var i = 0; i < offer.items_to_receive.length; i++) { 
    console.log("Waiting for callback..."); 
    doSomething(function(data) { 
     console.log("Got data from callback! " + data); 
    }); 
    console.log("Continue for loop now."); 
} 

Спасибо за входы!

+1

Возможно, вы не сможете сделать это в цикле for, потому что 'doSomething' выглядит как метод асинхронизации –

+0

Что может быть другим вариантом для этого, как я хочу? @ArunPJohny –

+1

https://jsfiddle.net/arunpjohny/h38wt723/1/ - попробуйте что-то вроде –

ответ

2

Вы не можете быть в состоянии использовать цикл, если вызываемый метод асинхронно, вместо этого вы можете использовать решение на основе рекурсии как

function x(items, i) { 
 
    i = i || 0; 
 
    if (i >= items.length) { 
 
    return 
 
    } 
 
    snippet.log("Waiting for callback..." + i); 
 
    doSomething(function(data) { 
 
    snippet.log("Got data from callback! " + data); 
 

 
    if (i == items.length - 1) { 
 
     snippet.log("completed"); 
 
    } else { 
 
     x(items, i + 1) 
 
    } 
 
    }); 
 
} 
 

 
// a sample implementation of asynchronous method 
 
var counter = 0; 
 
function doSomething(cb) { 
 
    setTimeout(cb.bind(window, counter++), 100) 
 
} 
 

 
x([1, 2, 3, 4])
<!-- Provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 --> 
 
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>

+0

Пожалуйста, не вызывайте функцию 'x'. – Amberlamps