2015-05-25 6 views
1
names = ["jack", "matt", "lisa", "jacob"]; 
names.forEach(function(name) { 
    getID(name); 
}); 

Цикл выполняется в случайном порядке. Как заставить их выполнять в следующем порядке:Форсировать порядок выполнения цикла nodejs

  1. имен [0]
  2. имен [1]
  3. имен [2]
  4. имен [3]
+1

Что такое 'getID'? Можете ли вы показать нам, как это реализовано? –

+2

Я предполагаю, что 'getID' выполняется асинхронно. Затем вы должны использовать библиотеку типа [async] (https://github.com/caolan/async) и использовать одну из последовательных функций. – hgoebl

+0

Проверьте мой ответ и введите свой идентификатор getID внутри. Все еще не удается? ¿? ¿Если он все еще не работает, ваш метод async будет getID, как говорят до –

ответ

0

Вашего forEach() цикл уже выполняется в том порядке, в котором элементы отображаются в массиве, поэтому предположение вашего вопроса неверно.

Вы можете видеть, что довольно просто, как это:

function log(x) { 
 
    var div = document.createElement("div"); 
 
    div.innerText = x; 
 
    document.body.appendChild(div); 
 
} 
 

 
var names = ["jack", "matt", "lisa", "jacob"]; 
 
names.forEach(function(name) { 
 
    log(name); 
 
});


Так что, если вы видите что-то из того, то это, вероятно, потому, что getID() включает в себя асинхронный операция. Таким образом, вы запускаете сразу четыре асинхронных операции, и хотя они были запущены по порядку, они не обязательно заканчиваются по порядку.

Если вы покажете нам код для getID() и опишите, что у вас проблема с заказом, мы, вероятно, помогли бы вам выяснить, как упорядочить асинхронные результаты в правильном порядке.

Обещания являются инструментом выбора для многих, чтобы помочь управлять порядком асинхронных операций, но нам нужно будет увидеть код getID(), чтобы узнать, как рекомендовать более конкретно, какой код изменить.

Смежные вопросы