2015-11-08 3 views
0

У меня проблема с циклом for в node.js. Я перечисляю все события в календаре Google и проверяю, были ли они добавлены в мою базу данных монго. Для контура проходит через каждое событие (здесь я еще не вставив его в БД, только тестирование):Неверный порядок для цикла в node.js (google calendar api, mongojs)

for (var i = 0; i < events.length; i++) { 
 
     var event = events[i]; 
 
     console.log("first"); 
 
     console.log(event); 
 
     db.events.find({googId = event.id}, function(err, doc) { 
 
      if (doc.length == 0) { 
 
       console.log("second"); 
 
       console.log(event); 
 
      } 
 
    }

Так что, когда я проверяю консоль, это первый имеет все " firsts "напечатаны в порядке, после чего у него есть" второе "и только последнее событие в списке на каждой итерации. Я немного смущен, поскольку я ожидал, что это покажет, например. (Предполагающие event1 и event2 еще не были добавлены в базу данных Монго):

first 
event1 
second 
event1 
first 
event2 
second 
event2 

вместо:

first 
event1 
first 
event2 
second 
event2 
second 
event2 

Что я здесь делаю неправильно?

+2

Это не просто случай завершения цикла перед выполнением обратных вызовов? – mathematician1975

+0

Спасибо! Я все еще довольно новичок в JS, поэтому я не знал об этом. –

+0

Да, асинхронная природа немного начинает привыкать к началу. – mathematician1975

ответ

2

Первый комментарий к вашему вопросу абсолютно правильный, операция db.events.find() является асинхронной (имеет обратный вызов), а цикл for - синхронный и выполняется до завершения операций запроса асинхронной базы данных.