从集合中获取并迭代

我想在循环中使用api返回数据。 但是你知道foreach循环asynchronous和我的allData json对象每次都是null。 我希望json对象不要为空。 这就是为什么…我想在下面做同步循环

var allData = []; router.get('/user', function (req, res, next) { var cursor = mdb.collection('USERS').find(); cursor.forEach(function (doc) { allData.push(doc); console.log(doc); }) console.log(allDaTa); }); 

打印:

 [ ] //<-- my json object is null (allData) <br><br> { _id: 5830ce676b184b1210d66749, USERNAME: 'burakgumus' } 

我再说一次<br><br>我想让json对象不是空的,我不想cursor.toArray().<br>

您需要将callback函数传递给您的查询。 因为这是一个asynchronous调用,并且稍后会通过代码的其余部分返回结果:

 var allData = []; router.get('/user', function (req, res, next) { mdb.collection('USERS').find({}).toArray(function(err, cursor) { cursor.forEach(function (doc) { allData.push(doc); console.log(doc); }); console.log(allDaTa); next(); }); }); 

除了Shaharyar的回答,如果你想要一个响应,你也必须调用响应的.send()函数,即res.send(allData)

 var allData = []; router.get('/user', function (req, res, next) { mdb.collection('USERS').find({}).toArray(function(err, cursor) { cursor.forEach(function (doc) { allData.push(doc); console.log(doc); }); console.log(allDaTa); res.send(allData); next(); }); });