1

我是 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 时,第一个索引在我插入任何对象之前就被“函数”占据了。因此,如果我查询 6 个对象,我只会取回其中的 5 个,因为第一个索引总是被占用。

我确定我必须在这里忽略一些简单的东西,但是网络搜索没有提供任何解决方案的提示。问题肯定出在数组的初始化上,但是我不明白是什么问题。我尝试了不同的方法来实例化它,结果相同。这是我的调试器的屏幕截图,最能描述正在发生的事情(我正在使用 WebStorm IDE):

怪异

如果您需要更多信息,请告诉我。我感谢社区可以提供的任何见解。

4

1 回答 1

3

你像这样初始化数组

var topicObjArray = [orm.Topic];

这使得数组的第一个元素,orm.Topic从你的代码的其余部分判断是一个函数。

只需像这样初始化您的数组:

var topicObjArray = [];
于 2013-05-06T15:14:52.083 回答