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

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

本文关键字:循环 错误 顺序 mongojs js 谷歌 日历 api node      更新时间:2023-09-26

我在node.js中遇到了for循环的问题。我正在谷歌日历中列出所有事件,并检查它们是否已添加到我的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",并且只有列表中的最后一个事件。我有点困惑,正如我所期望的那样。例如(假设事件1和事件2尚未添加到mongo数据库):

first
event1
second
event1
first
event2
second
event2

而不是:

first
event1
first
event2
second
event2
second
event2

我在这里做错了什么?

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