node.js 中的 for 循环顺序错误(google 日历 api,mongojs)

Wrong order in for-loop in node.js (google calendar api, mongojs)

我在 node.js 中遇到 for 循环问题。我正在列出 google 日历中的所有事件,并检查它们是否已添加到我的 mongo 数据库中。 for循环遍历每个事件(这里我还没有将它插入数据库,只是测试):

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",然后它有 "second",并且在每次迭代中只有列表中的最后一个事件。我有点困惑,正如我预期的那样(假设 event1 和 event2 尚未添加到 mongo 数据库):

first
event1
second
event1
first
event2
second
event2

而不是:

first
event1
first
event2
second
event2
second
event2

我做错了什么?

你的问题的第一条评论是绝对正确的,db.events.find() 操作是异步的(它有一个回调)并且你的 for 循环是同步的并且在异步数据库查询操作完成之前执行。