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 循环是同步的并且在异步数据库查询操作完成之前执行。
我在 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 循环是同步的并且在异步数据库查询操作完成之前执行。