【发布时间】:2019-03-26 00:22:08
【问题描述】:
我从服务器获取了几个数组形式的 JSON 对象,需要一种方法来对照我的数据库检查它们,以确定我是否需要创建一个新对象。然而,由于异步任务的工作方式,我用来确定对象是否已经在我的数据库中的变量总是等于来自服务器的数组中的最后一个对象,或者在我到达Collection.findOne({...});之前未定义@
代码:
for (var i = 0; i < elseArray.length; i++) {
var tempArray = elseArray[i][0].split(' ');
var month = getMonthFromString(tempArray[0]);
var date = tempArray[1];
var name = Name[i];
var loc = "";
if (elseArray[i][1].indexOf(':') != -1) {
min = elseArray[i][1].substring(elseArray[i][1].indexOf(':') + 1, elseArray[i][1].indexOf(':') + 3);
}
if (elseArray[i][1].includes("p.m.")) {
hour = parseInt(elseArray[i][1].substring(0, elseArray[i][1].indexOf('–')), 10) + 12;
} else {
hour = parseInt(elseArray[i][1].substring(0, elseArray[i][1].indexOf('–')), 10);
}
if (elseArray[i][2].replace(/\s/g, '') == "Event") {
loc = "Blue House"
} else {
loc = "Red House"
}
Collection.findOne({
Name: name,
Loc: loc,
"DateTime.Year": year,
"DateTime.Month": month,
"DateTime.Day": day
}, function(err, CollItem) {
if (err) {
res.send("MongoDB Error: " + err);
return false;
}
if (!CollItem) {
var E = new Collection({
Name: name,
Loc: loc,
Capacity: 0,
Attendance: 0,
DateTime: {
Year: year,
Month: month,
Day: day,
Hour: hour,
Min: min,
Sec: 0
}
});
E.save();
}
});
}
if (elseArray[i].length == 4) {
if (elseArray[i][3].replace(/\s/g, '') == "Event") {
loc = "Blue House"
} else {
loc = "Red House"
}
Collection.findOne({
Name: name,
Loc: loc,
"DateTime.Year": year,
"DateTime.Month": month,
"DateTime.Day": day
}, function(err, CollItem) {
if (err) {
res.send("MongoDB Error: " + err);
return false;
}
if (!CollItem) {
var E = new Collection({
Name: name,
Loc: loc,
Capacity: 0,
Attendance: 0,
DateTime: {
Year: year,
Month: month,
Day: day,
Hour: hour,
Min: min,
Sec: 0
}
});
E.save();
}
});
}
}
}
【问题讨论】:
标签: javascript node.js json asynchronous mongoose