如何使node.js和mongoDB中的循环同步运行

这是我第一次使用Node.js,并且遇到了问题。

我从API获取一些数据,并将它们存储在一个数组中。

然后,我正在做一些MongoDB的查询,知道我在该数组上的数据是否在数据库中。

我想为每个数组的出现使用一个for循环,但是当我尝试调用MongoDB时,for循环不断地增加计数器,而不用等待查询和相对响应的结束,并且我只获取最后一次出现的数据(反复)。

我的代码有一部分,而且在最后一次出现的时候,我总是得到相对于控制台的'结果'(例如,如果我期望像'1,2,3,4,5'这样的东西,我有'5 5 5 5')

我怎样才能确保for循环以正确的方式工作?

感谢帮助。

for ( counter = 0; counter < array.lenght; counter ++) { MongoClient.connect(url, function (err, db) { var query = { name: array[counter] }; db.collection("collectionName").find(query).toArray(function (err, result) { // Check if 'query' value exist in the database, if yes do some stuff, otherwise do others stuff console.log(result); } ) 

编辑:只是为了让大家知道,代码终于起作用了。 谢谢你的帮助。

尝试运行下面的代码。 让我知道如果它的工作与否。

 let fun = async function () { for (var counter = 0; counter < array.length; counter++) { await MongoClient.connect(url, function (err, db) { var query = { name: array[counter] }; db.collection("collectionName").find(query).toArray(function (err, result) { // Check if 'query' value exist in the database, if yes do some stuff, otherwise do others stuff console.log(result); }) }) } } fun(); 

问题是asynchronous执行正在等待,直到asynchronous方法开始为止,并且在那时计数器对于所有执行都具有最大值。 一个解决scheme是将for的所有内容放在不同的函数中,并用所需的参数调用它。 有了这个,你创build一个新的闭包,并保持variables的值。

 var doSomething = function(loopValue) { MongoClient.connect(url, function (err, db) { var query = { name: loopValue }; db.collection("collectionName").find(query).toArray(function (err, result) { // Check if 'query' value exist in the database, if yes do some stuff, otherwise do others stuff console.log(result); } } } for (let counter = 0; counter < array.length; counter ++) { doSomething(array[counter]); )