我是NodeJS和MongoDB的新手,我遇到了一个问题,我必须在循环中运行查询,并且查询的响应将决定是否继续循环。在nodejs中循环同步运行MongoDB查询
我必须调用一个API并将offset作为参数传递给它。该API一次返回50条记录。所以,当我得到50条记录时,我将偏移量增加到51,并再次用偏移量51调用相同的API以获得下50条记录。这将继续,直到API给出少于50条记录。这是我可以退出的时候了。所以,我没有事先做好什么,可以定义循环将循环多久。这取决于以前的API响应。 在每个API调用中,我保存在我的数据库(MongoDB)中获取的数据。
这里是我的粗略代码 -
var Client = require('node-rest-client').Client;
var client = new Client();
var MongoClient = require('mongodb').MongoClient;
var dburl = "mongodb://localhost:27017/mydb";
var repeat = true;
var result;
while(repeat){
client.get('http://example.com?$offset='+offset, function (data, response) {
result = JSON.parse(data);
num_records = ret.length;
MongoClient.connect(dburl, function(err, db) {
if (err) throw err;
var collection = db.collection('myCollection');
collection.insertMany(result, function(err, res) {
if (err) throw err;
if(num_records < 50){
repeat = false;
}
db.close();
});
});
});
if(offset==0)
offset = 51;
else
offset += 50;
}
这个无限循环。 请帮忙!
你必须使你的代码syncronous like,使用yield或async/await。 – Lazyexpert
是的...我正在寻找如何使它同步。在这种情况下,你能帮助我一个例子吗? –
它不会像你想象的那样同步.https://medium.com/@jamesmarino/the-best-feature-in-javascript-just-came-to-node-js-async-await-ebb7f5d60093 – Lazyexpert