Mongo请求的同步问题

时间:2019-05-20 13:53:13

标签: node.js mongodb

我要执行mongodb请求,等到它结束并返回结果。

问题是mongo请求之后的指令似乎要在请求结束甚至开始之前执行。

users_opposite = collection.find( {"mode" : opposite} ).forEach(function (usersOpposite) {

    users_closed.push(usersOpposite);
    console.log(users_closed.length);
});
console.log(users_closed.length);
console.log("test");

结果我得到了这个

  
    

0     测试     1个     2     3     4

  

我如何对以下指令说,直到foreach完成?

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

不是forEach,而是需要完成collection.find,然后您可以在回调中获得结果,例如:

collection.find({ mode: opposite }, function(err, usersOpposite) {
    console.log(usersOpposite);
});

答案 1 :(得分:1)

您必须等待collection.find()的执行

// giving a context for the code
async function foo() {

    // something before

    users_opposite = await collection.find( {"mode" : opposite} )
        .forEach(function (usersOpposite) {
            users_closed.push(usersOpposite);
            console.log(users_closed.length);
        });

    console.log(users_closed.length);
    console.log("test");
}

如Grégory在评论中所建议,此处更多信息How do I return the response from an asynchronous call?