我是javascript的新手,一直在修改节点js / mongo web服务。我循环遍历一个数组并在每个索引处执行一个带有id的查询,这样我就可以得到完整的对象,如下所示:
var topicObjArray = [orm.Topic];
for(var i = 0; i < topicIdsArray.length; i++) {
orm.Topic
.find({ appId: appId, _id: topic[i].id})
.exec(function(error, topic) {
if(error) {
console.log('oops ' + error);
}
else if(topic && topic.length > 0) {
topicObjArray.push(topic);
count++;
}
else {
count++;
}
if(count == topicIdsArray.length) {
// yay we've got all our topics! Carry on!
// But oh no something is amiss!
}
});
}
在正常情况下,计数将递增,直到它等于原始数组计数,并且方法可以完成。在这种情况下,出于某种原因,在topicObjArray初始化时,在我插入任何对象之前,第一个索引被'Function'占用。因此,如果我要查询六个对象,我将只返回其中的五个,因为第一个索引总是被占用。
我确信我必须在这里忽略一些简单的东西,但网络搜索没有提示解决方案。问题必须在数组的初始化中,但我不明白它是什么。我已经尝试了不同的方法来实例化它具有相同的结果。这是我的调试器的屏幕截图,它最能描述正在发生的事情(我使用的是WebStorm IDE):
如果您需要更多信息,请与我们联系。我感谢社区提供的任何见解。
答案 0 :(得分:3)
您可以像这样初始化数组
var topicObjArray = [orm.Topic];
这使得数组orm.Topic
的第一个元素从代码的其余部分判断为函数。
只需简单地初始化您的数组:
var topicObjArray = [];