我想在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>
答案 0 :(得分:2)
您需要将回调函数传递给查询。因为它是异步调用,所以稍后当你完成剩下的代码时会返回结果:
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();
});
});
答案 1 :(得分:0)
除了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();
});
});