从集合中获取并迭代
我想在循环中使用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(); }); });